tcollector是一個客戶端程序,用來收集本機的數據,並將數據發送到OpenTSDB。
OpenTSDB被設計的收集和寫入數據非常簡單,有一個簡單的協議,即使是一個shell腳本也可以用來發送數據。
但是,做到可靠和一致性就有些困難了。當TSD服務器down了該怎麼做?如何確保採集者一直在運行?這就是要使用tcollector的原因了。
tcollector可以爲你做一下幾件事:
- 運行所有的採集者並收集數據
- 完成所有發送數據到TSD的連接管理任務
- 不必在你寫的每個採集者中嵌入這些代碼
- 是否刪除重複數據
- 處理所有有線協議,以後今後的改進
重複數據刪除
通常情況下,你需要收集你係統的所有數據。這會產生大量的數據點,其中大多數的數據是不經常改變的。但是,當它們改變時,你想以細粒度來解決。Tcollector會記住發送所有時間序的最後的值和時間戳,如果該值在採樣間隔內沒有發生變化,將抑制發送該數據點。一旦該值發生變化(或10分鐘後),則發送上次抑制的值和時間戳,以及當前的值和時間戳。這樣一來,所有的圖形將是正確的。
重複數據刪除技術會減少TSD數據點的數量,同樣也可以減少網絡負載。
未來版本的OpenTSDB,會使用RLE來改善存儲格式,使得很少存儲重複值。
使用tcollector收集大量的metric
在tcollector下,可以使用任何語言編寫採集者。只需要採集者有可執行權限,並把數據以標準輸出輸出。其他的交給tcollector處理。採集者位於採集器目錄下,tcollector會遍歷每個數字目錄並執行這些目錄下的採集者。數字目錄代表採集間隔。如,如果目錄名稱爲60,tcollector將嘗試每60s運行該目錄下的所有采集者。目錄名爲0,說明採集者持續長久運行。tcollector會讀取它們的輸出,如果它們掛掉了,會復活它們。
一般來說,長久運行的採集者需要考慮耗資料少。OpenTSDB被設計成每個metric具有大量數據點。對於大多數metric,通常以15s爲一個數據點。
如果以任何非數字命令目錄,將忽略該目錄下的所有采集者。採集器目錄下還包含lib和etc目錄,爲所有采集者使用的library和配置數據。
安裝tcollector
git clone git://github.com/OpenTSDB/tcollector.git
編輯tcollector/startstop文件,設置該變量TSD_HOST=tsd.ttlsa.com。
爲了避免爲每個採集者創建各自的metric,啓動tsd時,加上--auto-metric 參數。不過從長遠看,不建議加上該參數,避免metric意外創建。
tcollector自帶的採集者
0/dfstat.py
這些統計類似於/usr/bin/df工具提供的。
- df.bytes.total 數據總大小
- df.bytes.used 已用的字節數
- df.bytes.free 剩餘的字節數
- df.inodes.total 總的inode數量
- df.inodes.used 已用的inode數
- df.inodes.free 剩餘的inode數
這些metric包含時間序標記每個掛載點和文件系統類型。此採集器可通過cgroup, debugfs, devtmpfs, rpc_pipefs, rootfs filesystems和掛載點/dev/, /sys/, /proc/和/lib/進行過濾。
0/ifstat.py
這些統計來自/proc/net/dev。
- proc.net.bytes (rate) Bytes in/out
- proc.net.packets (rate) Packets in/out
- proc.net.errs (rate) Packet errors in/out
- proc.net.dropped (rate) Dropped packets in/out
接口標籤iface=, 方向標籤direction=in|out。 僅僅ethN接口採集,有意排除bondN接口,因爲bonded接口也就是各個ethN接口的總計,沒必要重複收集。
0/iostat.py
數據來源於/proc/diskstats.
- iostat.disk.* 每個磁盤的統計
- iostat.part.* 每個分區的統計
iostats內容參見:https://www.kernel.org/doc/Documentation/iostats.txt
0/netstat.py
socket分配和網龍統計信息。
從/proc/net/sockstat來的metric。
- net.sockstat.num_sockets sockets分配的數量,僅TCP
- net.sockstat.num_timewait TCP sockets當前處在TIME_WAIT狀態數量
- net.sockstat.sockets_inuse 套接字使用的數量
- net.sockstat.num_orphans 孤兒套接字數量(不依附於任何文件描述符)
- net.sockstat.memory 分配給該套接字類型的內存大小(字節)
- net.sockstat.ipfragqueues 等待重新組裝的IP流數量
從 /proc/net/netstat (netstat -s )來的metric。
- net.stat.tcp.abort 內核中止連接數量
- net.stat.tcp.abort.failed 內核中止失敗數量,因爲沒有足夠內存來複位。
- net.stat.tcp.congestion.recovery 內存檢測到假重傳,能部分回收或全部CWND數量。
- net.stat.tcp.delayedack 發送不同類型的延遲確認數量。
- net.stat.tcp.failed_accept 在3WHS連接之後丟棄數。
- net.stat.tcp.invalid_sack 無效的SACK數量。
- net.stat.tcp.memory.pressure 進入"memory pressure"的次數。
- net.stat.tcp.memory.prune 因內存不足放棄接收數據的次數。
- net.stat.tcp.packetloss.recovery 丟失恢復的次數。
- net.stat.tcp.receive.queue.full 因套接字接收隊列慢導致被丟棄接收到的數據包數量。
- net.stat.tcp.reording 檢測到重新排序的次數。
- net.stat.tcp.syncookies SYN cookies數。
0/nfsstat.py
這些統計來自/proc/net/rpc/nfs.
- nfs.client.rpc.stats RPC狀態統計
- nfs.client.rpc RPC調用統計
0/procnettcp.py
這些統計來自 /proc/net/tcp{,6}。每60s收集一次。
- proc.net.tcp TCP連接數
0/procstats.py
來自/proc的統計。
- proc.stat.cpu CPU使用率統計。標籤爲CPU類型。type=user, nice, system, idle, iowait, irq, softirq。
- proc.stat.intr 中斷率
- proc.stat.ctxt 上下文切換率
procstat內容參見:http://www.linuxhowtos.org/System/procstat.htm
- proc.vmstat.* 從/proc/vmstat信息,參見:http://www.linuxinsight.com/proc_vmstat.html
- proc.meminfo.* 從/proc/meminfo統計的內存使用情況
- proc.loadavg.* 從/proc/loadavg統計的1min, 5min, 15min, runnable, total_threads指標。
- proc.uptime.total 啓動率
- proc.uptime.now
- proc.kernel.entropy_avail
- sys.numa.zoneallocs
- sys.numa.foreign_allocs
- sys.numa.allocation
- sys.numa.interleave
0/smart-stats.py
統計SMART磁盤信息。
- smart.raw_read_error_rate 當從盤面上讀取數據時,有關硬件讀取數據出錯的機率。
- smart.throughput_performance 硬盤驅動的總體吞吐量
- smart.spin_up_time 主軸旋轉起來的平均時間(從零轉速到完全運行[毫秒])
- smart.start_stop_count 主軸開始/停止週期的統計
- smart.reallocated_sector_ct 重新分配扇區的統計
- smart.seek_error_rate 磁頭尋道錯誤機率
- smart.seek_time_performance 磁頭尋道平均時間
- smart.power_on_hours
- smart.spin_retry_count
- smart.recalibration_retries
- smart.power_cycle_count
- smart.soft_read_error_rate
- smart.program_fail_count_chip
- smart.erase_fail_count_chip
- smart.wear_leveling_count
- smart.used_rsvd_blk_cnt_chip
- smart.used_rsvd_blk_cnt_tot
- smart.unused_rsvd_blk_cnt_tot
- smart.program_fail_cnt_total
- smart.erase_fail_count_total
- smart.runtime_bad_block
- smart.end_to_end_error
- smart.reported_uncorrect
- smart.command_timeout
- smart.high_fly_writes
- smart.airflow_temperature_celsius
- smart.g_sense_error_rate
- smart.power-off_retract_count
- smart.load_cycle_count
- smart.temperature_celsius
- smart.hardware_ecc_recovered
- smart.reallocated_event_count
- smart.current_pending_sector
- smart.offline_uncorrectable
- smart.udma_crc_error_count
- smart.write_error_rate
- smart.media_wearout_indicator
- smart.transfer_error_rate
- smart.total_lba_writes
- smart.total_lba_read
SMART說明參見:https://en.wikipedia.org/wiki/S.M.A.R.T.#Known_ATA_S.M.A.R.T._attributes
理解這些metric最好是看廠家的說明。
其他採集器
0/couchbase.py
統計couchbase數據庫的。
所有的metric都以bucket=爲標籤。桶是Couchbase服務器集羣中的邏輯分組。參見:http://docs.couchbase.com/couchbase-manual-2.1/#cbstats-tool
0/elasticsearch.py
統計Elastic 搜索的。
metric說明參見http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/cluster.html
0/hadoop_datanode_jmx.py
統計Hadoop DataNode 狀態。
默認情況下,採集器對這些metric是禁用的。revision, hdfsUser, hdfsDate, hdfsUrl, date, hdfsRevision, user, hdfsVersion, url, version, NamenodeAddress, Version, RpcPort, HttpPort, CurrentThreadCpuTime, CurrentThreadUserTime, StorageInfo, VolumeInfo.
metric說明參見:http://hbase.apache.org/book.html#hbase_metrics
0/haproxy.py
統計Haproxy 狀態信息。
- haproxy.current_sessions 當前的session數
- haproxy.session_rate 每秒新增session量
所有metric的標籤有server (server=) 和cluster (cluster=).
具體信息說明參見:http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
0/hbase_regionserver_jmx.py
統計Hadoop RegionServer 信息
默認情況下,採集器對這些metric是禁用的。revision, hdfsUser, hdfsDate, hdfsUrl, date, hdfsRevision, user, hdfsVersion, url, version, Version, RpcPort, HttpPort,HeapMemoryUsage, NonHeapMemoryUsage.
具體說明參見:http://hbase.apache.org/book.html#hbase_metrics
0/mongo.py
統計Mongo 信息。
具體metric說明參見:http://docs.mongodb.org/manual/reference/server-status/
0/mysql.py
統計mysql信息。
統計的信息有:InnoDB Innodb monitors, Global Show status, Engine Show engine, Slave Show slave status, Process list Show process list.
0/postgresql.py
統計PostgreSQL 信息。
metric說明參見:http://www.postgresql.org/docs/9.2/static/monitoring-stats.html
0/redis-stats.py
統計redis信息。
metric說明參見:http://redis.io/commands/INFO
0/riak.py
統計riak信息。
metric說明參見:http://docs.basho.com/riak/latest/ops/running/stats-and-monitoring/#Statistics-from-Riak
0/varnishstat.py
統計varnish信息。
默認情況下,所有的metric都收集。若要改變編輯採集器的vstats數組。運行“varnishstat-l”列出所有可用的metric。
0/zookeeper.py
統計zookeeper信息。
metric說明參見:http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#sc_zkCommands
對於本地的信息採集只好部署在本地了。可以通過自動化部署如puppet,saltstack來部署tcollector。
對於網絡類型的服務,集中式採集會方便些。不需要在每臺上去部署了。