OpenTSDB 2.3+及TCollector 1.3+安裝配置排錯

來源:互聯網
上載者:User

標籤:opentsdb   tcollector   資料擷取   監控   hbase   

其實不太想用opentsdb,一直以來用influxdb+grafana挺方便的,而且tsdb依賴hbase,雖說容量和速度有保證,但是分布式系統對於一個監控平台來說,終歸還是有些重了,出問題定位更繁瑣,但領導說用那就用吧。

在這裡必須吐一下OpenTSDB和Tcollector的文檔更新,太落後,看官方文檔根本找不到設定檔的位置。最後還得看源碼,尤其是TCollector,這個tsdb官方推出的資料擷取器。不光文檔落後,除了核心,周邊輔助的代碼也落後。而且外掛程式方式設計的各種資料收集器太奇葩了,運行不了就狂報錯。

安裝tsdb還是比較方便的,找一台hbase的regionserver直接rpm就可以。主要是搞了tcollector以後排錯,不過問題主要是在tcollector上,不賴tsdb。

不過tsdb裝完以後,需要自己運行一個指令碼叫create_table.sh來在hbase裡建立tsdb需要的表。這塊坑了我幾分鐘,安裝官方文檔的說法,建立表格時採用何種壓縮方式並不重要,然後運行指令碼,半個小時表都沒建立起來,指令碼預設會採用LZO方式選擇壓縮,就是建不起來,必須在命令列寫env COMPRESSION='NONE' ... 才可以。不過我這叢集是支援lzo的啊。不過跟tcollector相比,這就不算事。

tsdb的配置也算簡單,就不細說了。


tcollector是opentsdb官方推出的資料擷取器,符合個人開源風格,文檔長期不更新。參看官方文檔硬是找不到在哪配置能訪問opentsdb,文檔寫的檔案根本在代碼裡不存在,只能翻源碼。

tcollector安裝也不複雜,內建一個rpm的打包Makefile,直接make rpm就可以打包成rpm,然後放到repo裡面yum安裝即可,主要問題是安裝以後跑起來沒資料。

那就開始排錯吧,首先確定opentsdb能不能接收到資料。停掉tsdb,用 nc -l 4242 啟動一個TCP Server,監聽在原tsdb的連接埠上,然後啟動tcollector,nc接收到一個version,然後就沒了。好吧,去看tcollector的源碼。

        # we use the version command as it is very low effort for the TSD        # to respond        LOG.debug('verifying our TSD connection is alive')        try:            self.tsd.sendall('version\n')        except socket.error, msg:            self.tsd = None            self.blacklist_connection()            return False

嗯,version其實是相當於發送一個ping命令,如果沒有響應,就把伺服器放到黑名單裡。我不明白,往單一伺服器發送的程式,要黑名單幹什麼。

繼續nc -l,收到version給個響應。

收到version以後,直接在nc控制台裡打2,隨便給個響應就行,立刻資料就上來了。好吧,tcollector發送資料其實沒問題,那問題一定是在tsdb這邊了。

開啟tsdb的日誌,沒有任何報錯。

開啟 /etc/opentsdb/logback.xml 將日誌等級從INFO提升為DEBUG,opentsdb採用slf4j作為日誌記錄。

  <root level="DEBUG">    <!-- <appender-ref ref="STDOUT"/> -->    <appender-ref ref="CYCLIC"/>    <appender-ref ref="FILE"/>  </root>

重啟tsdb,再去看日誌,來了。


16:58:27.470 DEBUG [PutDataPointRpc.execute] - put: unknown metric: No such name for 'metrics': 'tcollector.reader.lines_collected'


說hbase的tsdb表裡沒有metrics這個列名,翻看官方文檔,有個配置叫


tsd.core.auto_create_metrics = true


預設是false,設定成true以後重啟tsdb,資料進入hbase,沒有問題了。


不過資料進到hbase裡面又出現一個問題,沒有cpu的度量資訊,看源碼得知cpu資訊在collector裡面的sysload.py裡面,不過翻看Makefile打包出來的rpm,裡面不包含這個檔案。沒辦法,接著回去看tcollector的Makefile和rpm的spec檔案,順手修複了一下centos6下的bug。

Makefile倒是沒看出什麼問題,幾個選項,all, rpm, clean, distclean, swix,分別對應 make all, make rpm, make clean等,那應該就是在spec檔案裡面了。

果然,spec檔案的第一個問題是rpm調用的python被硬指向了python 2.7,而centos6裡面是沒有2.7的,順手改之。

%global py2_sitelib   /usr/lib/python2.6/site-packages

第二個問題,安裝的外掛程式指向的是具體檔案。

%files collectors    %{tcollectordir}/collectors/0/dfstat.py    %{tcollectordir}/collectors/0/ifstat.py    %{tcollectordir}/collectors/0/iostat.py    %{tcollectordir}/collectors/0/netstat.py    %{tcollectordir}/collectors/0/procnettcp.py    %{tcollectordir}/collectors/0/procstats.py    %{tcollectordir}/collectors/0/smart_stats.py

所以結果是這幾個檔案才會被打包到rpm,這明顯是主要代碼更新了,而周邊輔助的代碼沒更新導致的。

不過改成 * 是不優雅的,因為有些新增的外掛程式因為調用依賴問題,啟動後會一直報錯,所以,需要根據具體需求來執行都安裝哪些外掛程式,所以,從這一點上說,這部分代碼的產品化程度還遠遠不夠,最起碼要做出外掛程式判斷啊,缺少依賴就別運行了。

更新了spec,重新打包,需要的資料就都進入hbase了。


而tcollector的配置是最大的槽點,放到最後壓軸來說,根據官方文檔,理應有一個startstop指令碼,將上報伺服器配置為opentsdb的伺服器,結果源碼裡死都找不到這個startstop指令碼。然後通過閱讀源碼得知,他娘的核心設定檔是放在外掛程式檔案夾裡的,這思路,簡直是災難啊。在 tcollector/collectors/etc/config.py裡面,其實並不複雜,但是比較煩人。

    defaults = {        'verbose': False,        'no_tcollector_stats': False,        'evictinterval': 6000,        'dedupinterval': 300,        'deduponlyzero': False,        'allowed_inactivity_time': 600,        'dryrun': False,        'maxtags': 8,        'max_bytes': 64 * 1024 * 1024,        'http_password': False,        'reconnectinterval': 0,        'http_username': False,        'port': 4242,        'pidfile': '/var/run/tcollector.pid',        'http': False,        'http_api_path': "api/put",        'tags': [],        'remove_inactive_collectors': False,        'host': 'to.your.opentsdb.server',        'backup_count': 1,        'logfile': '/var/log/tcollector.log',        'cdir': default_cdir,        'ssl': False,        'stdin': False,        'daemonize': False,        'hosts': False    }


嗯,這是我目前逛街發現的最坑的有公司維護的開原始碼了,設計出這個代碼結構的工程師應該拉出去槍斃半小時。浪費我2小時寶貴的擼碼時間裝這破玩意。

然後,我發現我司有一台伺服器上面是有tcollector的代碼的,檔案建立時間是15年,那會我還沒來,說明其實我司早就調研過這個,但是一直沒搞起來可能,這東西沒多難,但是文檔確實坑人。

感覺產品設計,從來就不是互連網碼農的強項,快速開發實現功能就行了,從不考慮產品化工程化代碼結構最佳化的問題。

最後,領導願意看用gnuplot畫的圖我也就不說什麼了。我還是把opentsdb作為資料來源接入到grafana裡面,用那個看更漂亮一點。

OpenTSDB 2.3+及TCollector 1.3+安裝配置排錯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.