无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

用Docker容器快速搭建一個DevOps監控Demo

Tao Liu

2020-02-03 / ,

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

TDengine作為一款2019年7月才開源的時序數據庫(Time-Series Database),一開(kai)源就獲得了(le)開(kai)發(fa)者的(de)(de)(de)(de)(de)廣泛(fan)好(hao)評,短短一個月的(de)(de)(de)(de)(de)時間就在GitHub上贏得了(le)1萬顆星的(de)(de)(de)(de)(de)驚人成績(ji)。隨著用戶的(de)(de)(de)(de)(de)不斷增多,TDengine的(de)(de)(de)(de)(de)高性(xing)能(neng)(neng)寫入查(cha)詢,高壓(ya)縮比存儲(chu)和(he)非常(chang)豐(feng)富(fu)的(de)(de)(de)(de)(de)查(cha)詢功能(neng)(neng)在實(shi)際使用中都得到充分的(de)(de)(de)(de)(de)驗證。為了(le)讓更多的(de)(de)(de)(de)(de)DevOps領(ling)域(yu)的(de)(de)(de)(de)(de)開(kai)發(fa)者快(kuai)速(su)體驗TDengine Database的(de)(de)(de)(de)(de)優秀特性(xing),本文(wen)介紹(shao)了(le)一種快(kuai)速(su)搭建DevOps領(ling)域(yu)性(xing)能(neng)(neng)監控的(de)(de)(de)(de)(de)demo,方便大(da)家更方便的(de)(de)(de)(de)(de)了(le)解TDengine,并基于(yu)此文(wen)拓展DevOps領(ling)域(yu)的(de)(de)(de)(de)(de)應用。

為了快速上(shang)(shang)手,本文(wen)用到的軟(ruan)件全(quan)部(bu)采(cai)用Docker容器方式部(bu)署,大家只(zhi)需要(yao)安裝Docker軟(ruan)件,就可以(yi)直(zhi)接通過腳(jiao)本運行(xing)所有軟(ruan)件,無需安裝。這個Demo用到了以(yi)下Docker容器,都可以(yi)從(cong)Dockerhub上(shang)(shang)拉取相關鏡像

  • tdengine/tdengine:1.6.4.5                          TDengine開源版1.6.4.5.的鏡像
  • tdengine/blm_telegraf:latest                     用于telegraf寫入TDengine的API,可以schemaless的將telegraf的數據寫入TDengine
  • tdengine/blm_prometheus:latest             用于Prometheus寫入TDengine的API,可以schemaless的將Prometheus的數據寫入TDengine
  • grafana/grafana                                         Grafana的鏡像,一個廣泛應用的開源可視化監控軟件
  • telegraf:latest                                            一個廣泛應用的開源數據采集程序
  • prom/prometheus:latest                           一個廣泛應用的k8s領域的開源數據采集程序

前提條件

  1. 一臺linux服務器或運行linux操作系統的虛擬機或者運行MacOS的計算機
  2. 安裝了Docker軟件。Docker軟件的安裝方法請參考
  3. sudo權限
  4. 下載本文用到的配置文件和腳本壓縮包:下載地址

壓縮包(bao)下(xia)(xia)載下(xia)(xia)來后解壓生成一個(ge)minidevops的(de)文件夾,其結(jie)構如下(xia)(xia)

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

grafana子文(wen)件夾里是TDengine的插件,用于在grafana中導入TDengine的數據源

prometheus子文(wen)件夾里(li)是prometheus需要的配置文(wen)件

run.sh是運(yun)行腳本

telegraf子文件夾里是telegraf的配置文件

啟動Docker鏡像

啟動前,請確保系統里沒(mei)有運(yun)行TDengine和Grafana,以及(ji)Telegraf和Prometheus,因(yin)為這些程序(xu)(xu)會(hui)占用docker所需的端口,造成腳本運(yun)行失敗,建(jian)議先關閉這些程序(xu)(xu)。

然后,只用在minidevops路徑(jing)下執行

sudo run.sh

既可以啟動所有docker容(rong)器(qi),并(bing)將各配置文件(jian)綁定到容(rong)器(qi)里去,形成(cheng)一個小(xiao)的監控系統

先(xian)來看(kan)看(kan)run.sh里干了什么,下面(mian)是run.sh文件(jian)的解釋

#!/bin/bash
 
LP=`pwd`
 
#為了讓腳本能夠順利執行,避免重復執行時出現錯誤, 首先將系統里所有docker容器停止了。請注意,如果該linux上已經運行了其他docker容器,也會被停止掉。
docker rm -f `docker ps -a -q`
 
#專門創建一個叫minidevops的虛擬網絡,并指定了172.15.1.1~255這個地址段。
docker network create --ip-range 172.15.1.255/24 --subnet 172.15.1.1/16 minidevops
 
#啟動grafana程序,并將tdengine插件文件所在路徑綁定到容器中
docker run -d --net minidevops --ip 172.15.1.11 -v $LP/grafana:/var/lib/grafana/plugins -p 3000:3000 grafana/grafana
 
#啟動tdengine的docker容器,并指定IP地址為172.15.1.6,綁定需要的端口
docker run -d --net minidevops --ip 172.15.1.6 -p 6030:6030 -p 6020:6020 -p 6031:6031 -p 6032:6032 -p 6033:6033 -p 6034:6034 -p 6035:6035 -p 6036:6036 -p 6037:6037 -p 6038:6038 -p 6039:6039 tdengine/tdengine:1.6.4.5
 
#啟動prometheus的寫入代理程序,這個程序可以將prometheus發來的數據直接寫入TDengine中,無需提前建立相關超級表和表,實現schemaless寫入功能
docker run -d --net minidevops --ip 172.15.1.7 -p 10203:10203 tdengine/blm_prometheus 172.15.1.6
 
#啟動telegraf的寫入代理程序,這個程序可以將telegraf發來的數據直接寫入TDengine中,無需提前建立相關超級表和表,實現schemaless寫入功能
docker run -d --net minidevops --ip 172.15.1.8 -p 10202:10202 tdengine/blm_telegraf 172.15.1.6
 
#啟動prometheus程序,并將配置文件所在路徑綁定到容器中
docker run -d  --net minidevops --ip 172.15.1.9 -v $LP/prometheus:/etc/prometheus -p 9090:9090 prom/prometheus
 
#啟動telegraf程序,并將配置文件所在路徑綁定到容器中
docker run -d --net minidevops --ip 172.15.1.10 -v $LP/telegraf:/etc/telegraf -p 8092:8092 -p 8094:8094 -p 8125:8125 telegraf
 
#通過Grafana的API,將TDengine配置成Grafana的datasources
curl -X POST //localhost:3000/api/datasources --header "Content-Type:application/json" -u admin:admin -d '{"Name": "TDengine","Type": "tdengine","TypeLogoUrl": "public/plugins/tdengine/img/taosdata_logo.png","Access": "proxy","Url": "//172.15.1.6:6020","BasicAuth": false,"isDefault": true,"jsonData": {},"readOnly": false}'
 
#通過Grafana的API,配置一個示范的監控面板
curl -X POST //localhost:3000/api/dashboards/db --header "Content-Type:application/json" -u admin:admin -d '{"dashboard":{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":1,"links":[],"panels":[{"datasource":null,"gridPos":{"h":8,"w":6,"x":0,"y":0},"id":6,"options":{"fieldOptions":{"calcs":["mean"],"defaults":{"color":{"mode":"thresholds"},"links":[{"title":"","url":""}],"mappings":[],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percent"},"overrides":[],"values":false},"orientation":"auto","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.6.0","targets":[{"refId":"A","sql":"select last_row(value) from telegraf.mem where field=\"used_percent\""}],"timeFrom":null,"timeShift":null,"title":"Memory used percent","type":"gauge"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":null,"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":6,"y":0},"hiddenSeries":false,"id":8,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"alias":"MEMUSED-PERCENT","refId":"A","sql":"select avg(value) from telegraf.mem where field=\"used_percent\" interval(1m)"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Panel Title","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"datasource":null,"gridPos":{"h":9,"w":6,"x":0,"y":8},"id":10,"options":{"fieldOptions":{"calcs":["mean"],"defaults":{"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"percent"},"overrides":[],"values":false},"orientation":"auto","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.6.0","targets":[{"alias":"CPU-SYS","refId":"A","sql":"select last_row(value) from telegraf.cpu where field=\"usage_system\""},{"alias":"CPU-IDLE","refId":"B","sql":"select last_row(value) from telegraf.cpu where field=\"usage_idle\""},{"alias":"CPU-USER","refId":"C","sql":"select last_row(value) from telegraf.cpu where field=\"usage_user\""}],"timeFrom":null,"timeShift":null,"title":"Panel Title","type":"gauge"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"TDengine","description":"General CPU monitor","fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":6,"y":8},"hiddenSeries":false,"id":2,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"alias":"CPU-USER","refId":"A","sql":"select avg(value) from telegraf.cpu where field=\"usage_user\" and cpu=\"cpu-total\" interval(1m)"},{"alias":"CPU-SYS","refId":"B","sql":"select avg(value) from telegraf.cpu where field=\"usage_system\" and cpu=\"cpu-total\" interval(1m)"},{"alias":"CPU-IDLE","refId":"C","sql":"select avg(value) from telegraf.cpu where field=\"usage_idle\" and cpu=\"cpu-total\" interval(1m)"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"10s","schemaVersion":22,"style":"dark","tags":["demo"],"templating":{"list":[]},"time":{"from":"now-3h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"]},"timezone":"","title":"TDengineDashboardDemo","id":null,"uid":null,"version":0}}'

執行以(yi)上腳(jiao)本后(hou),可以(yi)通(tong)過docker container ls命令來確認(ren)容器運行的(de)狀態:

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

當以上(shang)幾個容(rong)器都已正常運(yun)行后,則我(wo)們的(de)demo小系統已經開始工(gong)作了(le)。

Grafana中進行配置

打開瀏覽器,在(zai)地址(zhi)欄輸入(ru)服(fu)務器所在(zai)的IP地址(zhi)

//serverip:3000

就可以訪問(wen)到grafana的頁面

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

初始用戶(hu)名和密(mi)碼都是admin,輸入后(hou),即可(ke)進入grafana的(de)控制臺輸入用戶(hu)名/密(mi)碼后(hou),會(hui)進入修改密(mi)碼頁面(mian),選擇(ze)skip,跳(tiao)過這一(yi)步。

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

然后進以下頁面

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

可(ke)以在頁(ye)面(mian)的左下角看到如上圖紅框里標注的TDengineDashboardDemo已經創建好了(le),對(dui)于有些(xie)瀏覽器打開時(shi),可(ke)能會在home頁(ye)面(mian)中(zhong)沒(mei)有TDengineDashboardDemo的選項,可(ke)以通過(guo)在Dashboard->Manage中(zhong)選擇TDengineDashboardDemo

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

點擊進入示(shi)例(li)監控(kong)面板。剛點進去頁(ye)面時,監控(kong)曲線是空(kong)白的(de)(de),因(yin)為監控(kong)數(shu)據還不夠多,需要等待一段(duan)時間(jian),讓數(shu)據采集程序采集更(geng)多的(de)(de)數(shu)據。

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

如上(shang)兩個監控(kong)面板分(fen)別監控(kong)了CPU和內(nei)存(cun)占用率。點(dian)擊面板上(shang)的標題(ti)可以選(xuan)擇Edit進入(ru)編輯界面,新增(zeng)監控(kong)數據。關于Grafana的監控(kong)面板設置,可以詳細參(can)考(kao)Grafana官(guan)網文檔。

原理介紹

按上面的(de)操作(zuo)(zuo),我們已經將監控(kong)系(xi)統搭建起來了,目前可以監控(kong)系(xi)統的(de)CPU占有(you)率了。下(xia)面介紹下(xia)這個Demo系(xi)統的(de)工作(zuo)(zuo)原理。

如下圖(tu)所示,這(zhe)個(ge)系(xi)統由(you)數據采(cai)集(ji)(ji)功能(prometheus,telegraf),時序數據庫功能(TDengine和適配程序),可視化(hua)功能(Grafana)組成。下面虛線框(kuang)里的(de)TDengine,blm_prometheus, blm_telegraf三(san)個(ge)容器組成了一個(ge)schemaless寫入(ru)的(de)時序數據庫,對于采(cai)用telegraf和prometheus作(zuo)為采(cai)集(ji)(ji)程序的(de)監控(kong)對象,可以(yi)直接(jie)將數據寫入(ru)TDengine,并通過grafana進行可視化(hua)呈現(xian)。

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

數據采集

數(shu)據(ju)采集(ji)由Telegraf和Prometheus完成。Telegraf根據(ju)配置(zhi),從操(cao)作(zuo)系(xi)(xi)統層面采集(ji)系(xi)(xi)統的(de)相關統計值,并(bing)按配置(zhi)上報給(gei)指定的(de)URL,上報的(de)數(shu)據(ju)json格式為(wei)

{
    "fields":{
    "usage_guest":0,
    "usage_guest_nice":0,
    "usage_idle":87.73726273726274,
    "usage_iowait":0,
    "usage_irq":0,
    "usage_nice":0,
    "usage_softirq":0,
    "usage_steal":0,
    "usage_system":2.6973026973026974,
    "usage_user":9.565434565434565
    },
    "name":"cpu",
    "tags":{
        "cpu":"cpu-total",
        "host":"liutaodeMacBook-Pro.local"
        },
    "timestamp":1571665100
}

其中name將被作(zuo)為(wei)超級表(biao)的(de)表(biao)名,tags作(zuo)為(wei)普(pu)通表(biao)的(de)tags,fields的(de)名稱也會作(zuo)為(wei)一個tag用來描述普(pu)通表(biao)的(de)標簽。舉個例子,一個普(pu)通表(biao)的(de)結(jie)構(gou)如下,這是一個存儲usage_softirq數據的(de)普(pu)通表(biao)。

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

Telegraf的配置

對于使用telegraf作為數據(ju)采集程(cheng)序(xu)的監控對象,可以(yi)(yi)在(zai)telegraf的配置文(wen)件telegraf.conf中將(jiang)outputs.http部(bu)分的配置按以(yi)(yi)下(xia)配置修改(gai),就可以(yi)(yi)直接(jie)將(jiang)數據(ju)寫入TDengine中了(le)

[[outputs.http]]
#   ## URL is the address to send metrics to
url = "//172.15.1.8:10202/telegraf"
#
#   ## HTTP Basic Auth credentials
#   # username = "username"
#   # password = "pa$$word"
#
 
data_format = "json"
json_timestamp_units = "1ms"

可以打開(kai)(kai)HTTP basic Auth驗證機制,本(ben)Demo為(wei)了簡(jian)化沒有(you)打開(kai)(kai)驗證功能。

對(dui)于多個被監(jian)控對(dui)象,只需(xu)要在telegraf.conf文件中(zhong)都寫(xie)上以(yi)上的配置內容,就(jiu)可以(yi)將數據寫(xie)入TDengine中(zhong)了。

Telegraf數據在TDengine中的存儲結構

Telegraf的(de)數(shu)據在TDengine中(zhong)的(de)存(cun)儲,是以數(shu)據name為超(chao)級表名,以tags值加上(shang)監控對象的(de)ip地址,以及field的(de)屬(shu)性名作為tag值,存(cun)入TDengine中(zhong)的(de)。

以(yi)name為cpu的數(shu)據為例(li),telegraf產(chan)生的數(shu)據為:

{
    "fields":{
    "usage_guest":0,
    "usage_guest_nice":0,
    "usage_idle":87.73726273726274,
    "usage_iowait":0,
    "usage_irq":0,
    "usage_nice":0,
    "usage_softirq":0,
    "usage_steal":0,
    "usage_system":2.6973026973026974,
    "usage_user":9.565434565434565
    },
    "name":"cpu",
    "tags":{
        "cpu":"cpu-total",
        "host":"liutaodeMacBook-Pro.local"
        },
    "timestamp":1571665100
}

則寫(xie)入TDengine時會自動(dong)存(cun)入一個名為cpu的(de)超級(ji)表中,這個表的(de)結構如下(xia)

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

這個超級(ji)表的(de)tag字段有cpu,host,srcip,field;其中(zhong)cpu,host是原始數(shu)據攜帶的(de)tag,而srcip是監控(kong)(kong)對(dui)(dui)象的(de)IP地址,field是監控(kong)(kong)對(dui)(dui)象cpu類(lei)型(xing)數(shu)據中(zhong)的(de)fields屬性,取值(zhi)空間為[usage_guest,usage_guest_nice,usage_idle,usage_iowait,usage_irq,usage_nice,usage_softirq,usage_steal,usage_system,usage_user],每個field值(zhi)對(dui)(dui)應著一個具體含義的(de)數(shu)據。

因(yin)此,在查詢(xun)的時(shi)候(hou),可以用這些tag來過濾數(shu)據,也可以用超(chao)級表來聚合數(shu)據。

Prometheus的配置

對于(yu)使用Prometheus作為數據采(cai)集程序(xu)的監控對象,可以在Prometheus的配置(zhi)(zhi)文件prometheus.yaml文件中,將remote write部(bu)分的配置(zhi)(zhi)按以下配置(zhi)(zhi)修改,就可以直接將數據寫(xie)入TDengine中了。

remote_write:
  - url: "//172.15.1.7:10203/receive"

對于多個(ge)(ge)被監控(kong)對象,只需要(yao)在每個(ge)(ge)被監控(kong)對象的prometheus配(pei)置中(zhong)增加(jia)以(yi)上配(pei)置內容,就可以(yi)將數據(ju)寫入TDengine中(zhong)了。

Prometheus數據在TDengine中的存儲結構

Prometheus的(de)數據在TDengine中的(de)存儲,與telegraf類似(si),也是以數據的(de)name字段為超級表名,以數據的(de)label作為tag值(zhi),存入TDengine中

以prometheus_engine_queries這個數據為例

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

在TDengine中會自動(dong)創(chuang)建一個prometheus_engine_queries的超級表,tag字段(duan)為(wei)t_instance,t_job,t_monitor。

查(cha)詢時(shi),可(ke)以用(yong)這些tag來過濾(lv)數據(ju),也可(ke)以用(yong)超級表來聚合數據(ju)。

數據查詢

我們可以登陸到(dao)TDengine的客(ke)戶端命令,通(tong)過命令行看看TDengine里面都(dou)存儲(chu)了些什么數據,順便也能體(ti)驗一(yi)下TDengine的高(gao)性能查詢。

如何(he)才能登陸到TDengine的客戶(hu)端,我(wo)們可以通過以下幾步來(lai)完成。

首(shou)先通過下面(mian)的(de)命(ming)令查詢一下tdengine的(de)Docker ID

docker container ls

然后再執行

docker exec -it tdengine的containerID bash

就(jiu)可(ke)以(yi)進(jin)入TDengine容(rong)器(qi)的命(ming)令行(xing),執行(xing)taos,就(jiu)進(jin)入以(yi)下(xia)界面

用Docker容器快速搭建一個DevOps監控Demo - TDengine Database 時序數據庫

Telegraf的數(shu)據寫(xie)入時(shi),自動創(chuang)建了一(yi)個名為(wei)telegraf的database,可以(yi)通過

use telegraf;

使用(yong)telegraf這個數據(ju)庫(ku)。然后(hou)執行show tables,describe table等命令詳細(xi)查詢下telegraf這個庫(ku)里保存(cun)了些什(shen)么數據(ju)。

具體TDengine的查詢語句可以參考

接入多個監控對象

就像前面原理介(jie)紹的,這個miniDevops的小系(xi)統,已經提供(gong)了一個時序數(shu)據(ju)庫和可視化系(xi)統,對于多臺(tai)機器的監(jian)控,只需(xu)要將(jiang)每臺(tai)機器的telegraf或(huo)prometheus配置按上(shang)面所述修改(gai),就可以完成監(jian)控數(shu)據(ju)采集(ji)和可視化呈現了。

相關參考