監(jiān)控系列講座(二十)TIGK

1. 介紹

1.1. TIGK

在云環(huán)境中的工作的運營者特別依賴監(jiān)堆棧所提供的資源的持續(xù)可見性和告警,使其成為云的基礎(chǔ)組件。希望利用OpenStack等開源云環(huán)境的企業(yè)數(shù)量在不斷增加,這帶來了對開源監(jiān)控解決方案的需求。

隨著容器時代的到來,業(yè)務(wù)軟件架構(gòu)正在向微服務(wù)架構(gòu)發(fā)展和調(diào)整。微服務(wù)架構(gòu)下的軟件不斷提供更多的API接口來實現(xiàn)方便靈活的調(diào)度。在這種背景下,目前一些系統(tǒng)監(jiān)控軟件(比如Zabbix,nagios)就略顯笨重,使用靈活度上有所不足。

Telegraf Influx Grafana Kapacitor(TIGK)是在公有云(AWS,Aliyun,Azure,google云)或者私有云(OpenStack)云中使用的解決方案之一,可以Ansible部署。TIGK從系統(tǒng)CPU、RAM和I / O(網(wǎng)絡(luò)和磁盤)捕獲、存儲、顯示和觸發(fā)警報提示。

1.2. 名詞解釋

  • influxdata:開發(fā)T,I,K產(chǎn)品的公司,最知名的當(dāng)然還是influxdb

  • T:Telegraf,安裝在服務(wù)器上的agent,負(fù)責(zé)收集數(shù)據(jù)

  • I:InfluxDB,時序數(shù)據(jù)庫,負(fù)責(zé)高頻次的寫入和查詢

  • G:Grafana,數(shù)據(jù)展示平臺,支持多種數(shù)據(jù)源

  • K:Kapacitor,告警服務(wù)

2. 架構(gòu)圖

2.1. 整體架構(gòu)

file

2.2. Telegraf

Telegraf是一個插件驅(qū)動的服務(wù)器代理,用于收集和報告度量指標(biāo),使用起來跟Collectd、Statsd、Logstash等軟件很像。通過plugin來實現(xiàn)數(shù)據(jù)的input和output。Telegraf通過插件可以直接從它正在運行的系統(tǒng)中獲取各種指標(biāo),從第三方API獲取指標(biāo),甚至通過Statsd和Kafka的消費者服務(wù)來接收度量指標(biāo)。它還提供了輸出插件,將指標(biāo)發(fā)送到各種各樣的數(shù)據(jù)存儲、服務(wù)和消息隊列,包括InfluxDB,Graphite,OpenTSDB,Datadog,Librato,Kafka,MQTT,NSQ和很多其他組件。Telegraf目前支持80多種輸入插件,但目前還沒有直接獲取虛擬機度量指標(biāo)的插件,有個cloudwatch插件可以從Amazon CloudWatch獲取度量指標(biāo)。

Telegraf的特性:

  • Go語言編寫,編譯為一個二進(jìn)制文件,沒有外部依賴。

  • 占用內(nèi)存小,通過插件開發(fā)人員可輕松添加input和output來支持其他服務(wù)的擴展

  • 支持眾多流行服務(wù)大量插件,滿足主流監(jiān)控需求。

參考:官方文檔

2.3. InfluxDB

InfluxDB是一個時間序列數(shù)據(jù)庫,從創(chuàng)建之初就考慮到處理高的寫和查詢負(fù)載。InfluxDB是一個定制的高性能數(shù)據(jù)庫特別用來存儲時間戳數(shù)據(jù),包括DevOps監(jiān)控、應(yīng)用指標(biāo)、物聯(lián)網(wǎng)傳感器數(shù)據(jù),實時分析。為了節(jié)省機器上的存儲空間,可以配置InfluxDB保持?jǐn)?shù)據(jù)的時間長度,自動到期和從系統(tǒng)中刪除任何不需要的數(shù)據(jù)。InfluxDB還提供與數(shù)據(jù)交互的SQL的查詢語言。

InfluxDB的特性:

為時間序列數(shù)據(jù)專門定制的高性能數(shù)據(jù)存儲。TSM引擎允許高速接收和數(shù)據(jù)壓縮。完全go語言編寫。編譯成一個單一的二進(jìn)制,沒有外部依賴。

簡單,高效寫入和查詢HTTP(S) APIs。插件支持其他數(shù)據(jù)獲取協(xié)議如Graphite、collectd和OpenTSDB。定制的類SQL的查詢語言方便查詢匯總的數(shù)據(jù)。 通過標(biāo)簽為快速查詢和有效查詢進(jìn)行索引,保留政策有效地使失效數(shù)據(jù)自動過期。連續(xù)查詢自動計算聚合數(shù)據(jù),使頻繁查詢效率更高效。

內(nèi)置的web管理界面。雖然開源版本不支持集群服務(wù),但可以通過HAProxy + Influx Relays實現(xiàn)InfluxDB的高可用,這種架構(gòu)已經(jīng)被實現(xiàn)到OpenStack-Ansible Playbook中。此高可用性開源監(jiān)視堆棧的配置可以在這里找到。

參考:官方文檔

2.4. Chronograf/Grafana

Chronograf是管理員用戶界面和平臺可視化引擎。它使你的基礎(chǔ)設(shè)施的監(jiān)視和告警變得易于設(shè)置和維護(hù)。它使用起來很簡單,包括模板和庫,可以讓您快速構(gòu)建儀表板,實現(xiàn)數(shù)據(jù)的實時可視化,并且可以輕松創(chuàng)建告警和自動化規(guī)則。

在TICK套件中,Chronograf可以被開源軟件Grafana所替代,它們的功能類似,但后者更成熟些。Grafana支持Elasticsearch、InfluxDB等多種數(shù)據(jù)源,目前部署時常用Grafana替代Chronograf,此時運維棧變?yōu)門IGK。

Grafana是一個功能齊全的度量儀表盤軟件,支持從多種數(shù)據(jù)源讀取數(shù)據(jù)用圖表顯示,界面美觀,有沖擊力,功能設(shè)計方便實用。多用于可視化基礎(chǔ)實施和應(yīng)用分析的時間序列數(shù)據(jù),也可應(yīng)用在其它領(lǐng)域,包括工業(yè)傳感器、家庭自動化、天氣和過程控制。

Grafana的特點:

功能強大,展示監(jiān)控數(shù)據(jù)就是小菜一碟,支持8種內(nèi)置圖表類型,可為不同類型的數(shù)據(jù)選擇不同類型的圖表進(jìn)行展示;

豐富的數(shù)據(jù)源接口,Elasticsearch、InfluxDB等各種數(shù)據(jù),可通過插件擴展

豐富的API接口,方便自動化程序調(diào)用;

監(jiān)控dashboard 導(dǎo)入、導(dǎo)出,這個功能比較實用,做好一個比較滿意的展示面板,導(dǎo)出后主要修改一下里面的IP等信息,通過導(dǎo)入,其它主機的展示全部搞定。

支持告警,但功能相對較簡單,目前只有g(shù)raph圖表支持告警,也只有Graphite,Prometheus,InfluxDB和OpenTSDB四種數(shù)據(jù)源支持告警。

參考:官方網(wǎng)站

2.5. Kapacitor

Kapacitor是時序數(shù)據(jù)分析、處理引擎。它可以處理來自InfluxDB的流數(shù)據(jù)和批量數(shù)據(jù)。Kapacitor允許插入用戶自定義的邏輯或用戶自定義的函數(shù)來處理基于動態(tài)門限的告警,匹配模式指標(biāo),計算統(tǒng)計異常,并根據(jù)這些告警執(zhí)行特定動作,比如動態(tài)負(fù)載均衡。Kapacitor支持Email,HTTP,TCP,HipChat,OpsGenie,Alerta,Sensu,PagerDuty,Slack等多種方式告警。

Kapacitor的特性:

可以處理流數(shù)據(jù)和批量數(shù)據(jù);

按計劃從InfluxDB查詢數(shù)據(jù),或通過line協(xié)議從InfluxDB接收數(shù)據(jù);

使用InfluxQL對數(shù)據(jù)做各種轉(zhuǎn)換;

將轉(zhuǎn)換后的數(shù)據(jù)存回InfluxDB;

添加用戶自定義函數(shù)檢測異常;

與HipChat, OpsGenie, Alerta, Sensu, PagerDuty, Slack等集成。

參考:官方文檔

3. 資源清單

3.1. 測試環(huán)境

組件 版本 主機 CPU 內(nèi)存 磁盤
InfluxDB 1.7.9 10.10.10.1 RHEL7
Telegraf 1.13.3 10.10.10.1 RHEL7
Grafana 6.6.1 10.10.10.1 RHEL7
Kapacitor 1.5.4 10.10.10.1 RHEL7

3.2. 生產(chǎn)環(huán)境

4. 安裝與配置

在工作中,為了方便管理,建議大家使用RPM/DNF/DEB的方式安裝

4.1. 安裝與配置InfluxDB

  • 下載與安裝:

    $ yum install -y https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9.x86_64.rpm
    
  • 配置文件:/etc/influxdb/influxdb.conf,請修改以下幾個地方,其他的默認(rèn)配置就好,如果修改到其他的位置,一定注意修改權(quán)限,因為systemctl默認(rèn)的啟動用戶是influxdb。

    [meta]
      # 數(shù)據(jù)庫的元數(shù)據(jù),相當(dāng)于配置文件
      dir = "/var/lib/influxdb/meta"
    .
    .
    [data]
      # 數(shù)據(jù)存儲的位置,建議放到獨立的高性能磁盤上
      dir = "/var/lib/influxdb/data"
    
      # 類似于mysql的binlog,會被頻繁的讀寫,建議放到獨立的高性能磁盤上
      wal-dir = "/var/lib/influxdb/wal"
    

    注意:如果出現(xiàn)不能啟動的情況,請查看/var/log/messages,或者使用journalctl -u influxdb。

  • 啟動服務(wù)并且開機自動運行

    $ systemctl start influxdb && systemctl enable influxdb
    
  • 測試:

    ~]# influx
    Connected to http://localhost:8086 version 1.7.9
    InfluxDB shell version: 1.7.9
    > show databases;
    name: databases
    name
    ----
    _internal
    

4.2. 安裝與配置Telegraf

  • 下載與安裝:

    $ yum install -y https://dl.influxdata.com/telegraf/releases/telegraf-1.13.3-1.x86_64.rpm
    
  • 配置文件位置:/etc/telegraf/telegraf.conf,里面的配置文件默認(rèn)收集cpu,disk的信息,并寫入influxdb,如果有其他的需求,請各位自行修改。

  • 啟動服務(wù)并且開機自動運行

    $ systemctl start telegraf && systemctl enable telegraf
    
  • 測試

    ~]# influx
    Connected to http://localhost:8086 version 1.7.9
    InfluxDB shell version: 1.7.9
    > show databases;
    name: databases
    name
    ----
    _internal
    telegraf
    > use telegraf
    Using database telegraf
    > show measurements
    name: measurements
    name
    ----
    cpu
    disk
    diskio
    kernel
    mem
    processes
    swap
    system
    > select * from cpu;
    name: cpu
    time                cpu       host                                          usage_guest usage_guest_nice usage_idle         usage_iowait         usage_irq usage_nice usage_softirq       usage_steal          usage_system         usage_user
    ----                ---       ----                                          ----------- ---------------- ----------         ------------         --------- ---------- -------------       -----------          ------------         ----------
    1581663700000000000 cpu-total ip-10-0-2-159.cn-northwest-1.compute.internal 0           0                67.41741741741244  0.15015015015012734  0         0          0                   0                    0.3003003003002458   32.13213213212678
    1581663700000000000 cpu0      ip-10-0-2-159.cn-northwest-1.compute.internal 0           0                62.662662662666214 0.2002002002002003   0         0          0.10010010010010238 0                    0.4004004004004184   36.63663663663769
    

4.3. 安裝與配置Grafana

  • 下載與安裝:

    $ yum install -y https://dl.grafana.com/oss/release/grafana-6.6.1-1.x86_64.rpm
    
  • 配置文件位置:/etc/grafana/grafana.ini

  • 啟動服務(wù)并且開機自動運行

    $ systemctl start grafana-server && systemctl enable grafana-server
    
  • 登錄Web控制臺:http://你的IP:3000,默認(rèn)的用戶名/密碼是admin/admin,第一次登錄需要修改密碼,然后進(jìn)入向?qū)?code>add data source,選擇InfluxDB,URLhttp://localhost:8086,Databasetelegraf,點擊Save & Test,出現(xiàn)Data source is working表示成功,點擊back回到數(shù)據(jù)源的配置

  • 點擊左側(cè)菜單欄的+符號Create,點擊Import,Grafana.com Dashboard的位置輸入1138,在隨便點擊一下空白處,下面的Influx選擇咱們剛才配置的Influxdb,點擊Import

  • 來看看效果吧

file
file
  • 我們發(fā)現(xiàn)網(wǎng)絡(luò)的部分是沒有數(shù)據(jù)的,因為我們沒有加載網(wǎng)絡(luò)監(jiān)控的配置。我們繼續(xù)編輯/etc/telegraf/telegraf.conf文件,修改下面的配置并重啟服務(wù)。

    [[inputs.net]]
      ## By default, telegraf gathers stats from any up interface (excluding loopback)
      ## Setting interfaces will tell it to gather these explicit interfaces,
      ## regardless of status.
      ##
      interfaces = ["eth0"]
      ##
      ## On linux systems telegraf also collects protocol stats.
      ## Setting ignore_protocol_stats to true will skip reporting of protocol metrics.
      ##
      # ignore_protocol_stats = false
      ##
    
  • 這個時候我們再看,發(fā)現(xiàn)網(wǎng)絡(luò)流量已經(jīng)可以監(jiān)控了

file

4.4. 安裝與配置Kapacitor

  • 下載與安裝:

    $ yum install https://dl.influxdata.com/kapacitor/releases/kapacitor-1.5.4-1.x86_64.rpm
    
  • 配置文件位置:/etc/, 如果沒有特殊的需求,不需要配置任何的參數(shù)

  • 啟動服務(wù)并且開機自動運行

    $ service kapacitor start && chkconfig kapacitor on
    
  • 創(chuàng)建規(guī)則cpu_alert.tick

    dbrp "telegraf"."autogen"
    
    stream
        // Select just the cpu measurement from our example database.
        |from()
            .measurement('cpu')
        |alert()
            .crit(lambda: int("usage_idle") <  70)
            // Whenever we get an alert write it to a file.
            .log('/tmp/alerts.log')
    
  • 加載規(guī)則kapacitor define cpu_alert -tick cpu_alert.tick

  • 查看規(guī)則

    $ kapacitor list tasks
    ID        Type      Status    Executing Databases and Retention Policies
    cpu_alert stream    disabled  false     ["telegraf"."autogen"]
    
    $ kapacitor show cpu_alert
    ID: cpu_alert
    Error:
    Template:
    Type: stream
    Status: disabled
    Executing: false
    
  • 啟用規(guī)則kapacitor enable cpu_alert

  • 參考官方文檔詳細(xì)文檔

5. 總結(jié)

  • InfluxData是以InfluxDB出名的,個人感覺InfluxDB在時序數(shù)據(jù)庫角度是超越Prometheus的,穩(wěn)定性非常強,且占用資源非常少,而且http寫入的方式也讓數(shù)據(jù)庫的兼容性非常好。

  • 但是InfluxDB的社區(qū)版并不支持集群,這就讓他在生產(chǎn)系統(tǒng)上上線成為了最大的障礙,花錢總是讓那個老板肉疼的一件事。

  • Telegraf作為Agent和Influx的結(jié)合還是非常完美的,但是Telegraf的社區(qū)并不活躍,在這個開源軟件活躍的時代,光靠公司的力量想從頭維護(hù)一款軟件是非常困難的,最好提供統(tǒng)一的接口或者廣泛的兼容性,或者有個好靠山:)。

  • Chronograf本次沒有涉及,從軟件選擇的時候就舍棄了,因為他只可以和InfluxDB兼容,不像Grafana兼容性廣泛,在生產(chǎn)上使用的機會不多。

  • Kapacitor的用戶體現(xiàn)并不是很好,也許是沒有買商用版的原因,報警規(guī)則非常的繁瑣,報警的消息模板也非常不友好。感覺還不如Grafana自帶的規(guī)則好用。

  • Grafana目前真的挑不出毛病,硬要說的話,就是報警規(guī)則需要自己創(chuàng)建,讓一般用戶上手有點困難。

  • 微信公眾號 云原生技術(shù)課堂

  • 專題講座

2020 CKA考試視頻 真題講解 https://www.bilibili.com/video/BV167411K7hp

2020 CKA考試指南 https://www.bilibili.com/video/BV1sa4y1479B/

2020年 5月CKA考試真題 https://mp.weixin.qq.com/s/W9V4cpYeBhodol6AYtbxIA

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容