好久沒更新博客園了,說來也慚愧,之前說好每隔幾天更新一個的,雖然沒什么人看,但是作為一個記錄,回顧也是能有新的認識,這篇博客是講的目前我在工作中使用的一個結束點,這個技術點目前網上資料少之甚少,也是希望給剛接觸的人一個大概的思路,稍作分析下。說了這么多其實我也是個半吊子,也就間接性的躊躇滿志,想到一出是一出,寫下這個博客都是腦子一熱,只是在自己使用的過程中遇到很多問題,解決的比較艱難,查資料又查不了,只能看官方文檔,官方文檔又是全英文的,閱讀起來速度又比較慢,看翻譯之后的有很多翻譯根本就不對,會導致對方法的錯誤理解和使用。總之賊雞兒煩,所以下面的東西希望對你有所幫助,講的內容不多,也不深,只是給剛剛接觸的一個介紹,和自己的一個記錄,說了這么多自己都不知道說啥,欲言又止,作為一個程序員在生活中沒有那么多時間去扯犢子,所以我就在這多嘮叨幾句了,對了我還有一個學習的群,有興趣的可以進來玩玩,494696003 反正沒事進來嘮嘮嗑啥的也是不錯的。
首先申明:一下內容僅供參考,切勿轉發。 閱讀一下文章需要對TICK架構腳本 有一定了解,起碼知道TICK是干嘛的,里面的一部分語法是怎樣的。 熟悉一下TICK的官方文檔有一定的必要,否則可能不知道我在說啥。
下面我們去看下tick里面的腳本長什么樣
在這個地方給大家介紹一下 腳本為啥要這樣寫: TICK 遵循一定的規范,官網可以查。 |query(sql) 此節點可以執行sql的查詢語句, .period(10m) 此鏈接方法 是屬於query下的,意為查詢時間的范圍,也就是說如果到時候你的sql寫完之后 會在真正執行的時候在你的sql后面拼接 where xx - xx 時間的范圍查詢,這個范圍就是你設定的 10m .window(10) 以此類推 一下就不多做說明,這個也是屬於query的連接方法,意為每個多長時間我們的腳本去執行一次這個查詢的時間,也就是10分鍾去執行一次查詢。 .groupBy('ciid') 這是根據給定的字段進行分組。
|eval 這個節點是TICK腳本中用於業務計算的一個節點,通過lambda表達式能夠對以上查詢出來的數據進行計算。 計算的時候在tick中 只有浮點數和整數的概念,所以計算的2側的數據類型要一致否則腳本運行出錯。 |influxDBOut() 這個節點是將以上的數據計算之后 輸出到制定的數據庫中。 .databases(xx) .measurement(xx) 以上數據庫均是Influxdb
以下是我寫的一個腳本:計算CPU使用率的一個模板 腳本 var period = 10m var window = 10m var to_kpiid = 'PM-00-01-001-05' var to_kpiname = 'kpi_cpu_usage' var sql = 'select mean(value) as value from kpi_mock.autogen."PM-00-01-001-01"' var ciid = '' var ciname = '' var citype = '' var cpu_idle = batch |query(sql) .period(period) .every(window) .align() var usage = cpu_idle |eval(lambda: 100.0 - float("value")) .as('value') |delete() .tag('kpiname') .tag('kpiid') .tag('ciid') .tag('ciname') .tag('citype') |default() .tag('kpiname', to_kpiname) .tag('kpiid', to_kpiid) .tag('ciid', ciid) .tag('ciname', ciname) .tag('citype', citype) |influxDBOut() .database('kpi_mock') .measurement(to_kpiid)
如何定義一個模板(template 此處batch為例,stream類似)
batch_avg_test為自己取名 帶上.tick 即你的tick腳本 類型為batch
./kapacitor define-template batch_avg_test -tick batch_avg_test.tick -type batch
如何根據一個模板創建具體的任務(task)
在創建具體任務的時候 你需要根據模板參數 寫一個相應的json文件,將參數傳入模板當中 生成具體的任務
PM-XX-XX-XX-XX:為任務名稱
batch_avg_test:模板名稱(即剛上面創建的模板)
test.json:傳入數據的json文件
xxx.autogen 制定腳本當中執行sql語句和輸出數據庫的 保留策略(見官方文檔)
./kapacitor define PM-XX-XX-XX-XX -template batch_avg_test -vars test.json -dbrp xxx.autogen
在kapacitor的后台當中 有很多命令都是查看 任務 模板 狀態 ,這些都在官方文檔有介紹,我這列出一些圖給大家進行參考結合自己的理解。
這個是查看 定義腳本之后生成的模板命令,展示的就是模板。
想要查看具體模板的信息 如下圖
這個是查看 根據模板 生成具體的任務, 展示的是任務
想要查看每一個任務的具體的狀態信息可以執行,可以查看到具體的執行時間,寫入的節點數等等...
如果在操作的過程中,狀態那邊的節點數都是0 如果有error 那個error那里會顯示出具體的個數,但是不會顯示具體的錯誤。具體錯誤查看下面講解。
相信大家現在對TICK 具體是什么有一定的了解了吧。 下來我們查看下如何查看我們的TICK腳本 都執行了什么,錯在了,怎么查看日志
還記得第一張圖中有一個 KapaData的目錄嗎,進去到log 目錄下執行
grep PM-XX-XX-XX-XX *.log
其中 PM-XX-XX-XX-XX 代表着你具體的執行任務的名稱
這樣你就知道你的任務具體是怎么跑,出什么錯都會在這里顯示,還有sql 語句,將sql復制去influxdb 執行就能對比出來數據是否正確了。
以上是使用TICK 的一整套的流程,具體的計算方式需要閱讀官方文檔,例如計算,保留策略,節點,鏈接方法,精度等問題。 所有運行都沒問題的情況下,你只需查看influxdb數據庫產生的表中的數據是否正確即可。這樣一整套TICK腳本監控指標就完成了。 文中有很多沒有詳細講解,畢竟時間有限,篇幅有限,如有時間繼續細化內容。(如有差錯望博友指正以至於及時修改,淺顯講解勿噴~都是有素質的人) 在這里祝大家工作順利,所有BUG都能順利結局~ 再見