OpenTSDB TCollector 詳解

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

對於本地的信息採集只好部署在本地了。可以通過自動化部署如puppetsaltstack來部署tcollector。

對於網絡類型的服務,集中式採集會方便些。不需要在每臺上去部署了。


原文鏈接地址 : OpenTSDB TCollector 詳解 | 運維生存時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章