搭建監(jiān)控系統(tǒng) (Node exporter、Grafana稚疹、Prometheus居灯、Alertmanager)

一、環(huán)境搭建

1、安裝Node?exporter

1)?a穆壕、mac 安裝?brew install node_exporter

b待牵、啟動?node_exporter

node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"

c、訪問啟動頁面

node_boot_time:系統(tǒng)啟動時間

node_cpu:系統(tǒng)CPU使用量

nodedisk*:磁盤IO

nodefilesystem*:文件系統(tǒng)用量

node_load1:系統(tǒng)負載

nodememeory*:內(nèi)存使用量

nodenetwork*:網(wǎng)絡(luò)帶寬

node_time:當(dāng)前系統(tǒng)時間

go_*:node exporter中g(shù)o相關(guān)指標

process_*:node exporter 自身進程相關(guān)運行指標

2) docker啟動

a喇勋、docker pull prom/node-exporter

b、docker run -d --name=node? -p 9100:9100 prom/node-exporter:latest

c偎行、驗證啟動結(jié)果

2川背、安裝Prometheus

1)?docker pull prom/prometheus

2)啟動prometheus

docker run -d -p 9090:9090 -v /tmp/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml ?prom/prometheus

a、prometheusyml

global: ? ? ? ? ? ? ? ? ?

? scrape_interval: ? ? 15s?


? external_labels:? ?

? ? monitor: 'codelab-monitor'


# Alertmanager配置

alerting:

?alertmanagers:

?- static_configs:

?? - targets: ["192.168.50.100:9093"] # 設(shè)定alertmanager和prometheus交互的接口蛤袒,即alertmanager監(jiān)聽的ip地址和端口

rule_files:?

? - '/tmp/prometheus/prometheus_rules.yml'

? - '/tmp/prometheus/alertmanager/alertmanager_rules.yml'?

scrape_configs:?

? - job_name: 'prometheus'?


? ? # 覆蓋全局的 scrape_interval

? ? scrape_interval: 5s


? ? static_configs: ?

? ? ? - targets: ['192.168.50.100:9090']


? - job_name: 'node'


? ? scrape_interval: 10s

? ? metrics_path: "/metrics"


? ? static_configs:

? ? ? - targets: ['192.168.50.100:9100']? # 本機 node_exporter 的 endpoint 這里若配置成127.0.0.1 會出現(xiàn)gramtheus訪問node不通問題

b熄云、prometheus_rules.yml?

(base) mengfaniaodeMBP:prometheus mengfanxiao$ cat prometheus_rules.yml?

groups:

- name: example ? #報警規(guī)則的名字

? rules:

? # Alert for any instance that is unreachable for >5 minutes.

? - alert: InstanceDown ? ? #檢測job的狀態(tài),持續(xù)1分鐘metrices不能訪問會發(fā)給altermanager進行報警

? ? expr: up == 0

? ? for: 1m? ? #持續(xù)時間

? ? labels:

? ? ? serverity: page

? ? annotations:

? ? ? summary: "Instance {{ $labels.instance }} down"

? ? ? description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

? - alert: "it's has problem"? #報警的名字

? ? expr: "test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} -? test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} offset 1w > 5" ? # 這個意思是監(jiān)控該表達式查詢出來的值與一周前的值進行比較妙真,大于5且持續(xù)10m鐘就發(fā)送給altermanager進行報警

? ? for: 1m? #持續(xù)時間

? ? labels:

? ? ? serverity: warning

? ? annotations:

? ? ? summary: "{{ $labels.type }}趨勢增高"

? ? ? description: "機器:{{ $labels.host }} tomcat_id:{{ $labels.id }} 類型:{{ $labels.type }} 與一周前的差值大于5,當(dāng)前的差值為:{{ $value }}"? ? #自定義的報警內(nèi)容

c缴允、alertmanager_rules.yml?

(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager_rules.yml?

groups:

?- name: test-rules

?? rules:

?? - alert: InstanceDown # 告警名稱

?? ? expr: up == 0 # 告警的判定條件,參考Prometheus高級查詢來設(shè)定

?? ? for: 2m # 滿足告警條件持續(xù)時間多久后珍德,才會發(fā)送告警

?? ? labels: #標簽項

? ? ? team: node

?? ? annotations: # 解析項练般,詳細解釋告警信息

? ? ? summary: "{{$labels.instance}}: has been down"

? ? ? description: "{{$labels.instance}}: job {{$labels.job}} has been down "

? ? ? value: {{$value}}

(base) mengfaniaodeMBP:alermanager mengfanxiao$ ls

alertmanager.ymlalertmanager_rules.ymlconfig.ymltemplate

(base) mengfaniaodeMBP:alermanager mengfanxiao$?

(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager_rules.yml?

groups:

?- name: test-rules

?? rules:

?? - alert: InstanceDown # 告警名稱

?? ? expr: up == 0 # 告警的判定條件,參考Prometheus高級查詢來設(shè)定

?? ? for: 2m # 滿足告警條件持續(xù)時間多久后锈候,才會發(fā)送告警

?? ? labels: #標簽項

? ? ? team: node

?? ? annotations: # 解析項薄料,詳細解釋告警信息

? ? ? summary: "{{$labels.instance}}: has been down"

? ? ? description: "{{$labels.instance}}: job {{$labels.job}} has been down "

? ? ? value: {{$value}}

3)

a、驗證是否啟動成功

b泵琳、prometheus的數(shù)據(jù)

c摄职、看配置的2個數(shù)據(jù)源是否成功

問題:

Get http://127.0.0.1:9100/metrics: dial tcp 127.0.0.1:9100: connect: connection refused

但telnet?127.0.0.1?9100是可以的

原因是:

容器具有單獨的網(wǎng)絡(luò)名稱空間,這意味著容器中的127.0.0.1在主機上不是127.0.0.1获列。

您應(yīng)該使用主機的IP或使用--network = host啟動容器谷市。

host模式下使用-p或者-P會出現(xiàn)WARNING: Published ports are discarded when using host network mode 當(dāng)你是host模式的時候,主機會自動把他上面的端口分配給容器击孩,這個時候使用-p或者-P是無用的迫悠。但是還是可以在Dockerfile中聲明EXPOSE端口?后續(xù)文章再詳談

3、安裝grafana

1)docker pull grafana/grafana

2)查看下載情況

docker images|grep grafana/grafana

3)創(chuàng)建一個grafana/grafana容器并啟動

docker run -d --name=grafana -p 3000:3000 grafana/grafana

4)訪問啟動頁面

默認賬號admin/admin

5)登陸了之后 配置數(shù)據(jù)源

數(shù)據(jù)源配置好之后 創(chuàng)建儀表盤用于顯示數(shù)據(jù)源的數(shù)據(jù)

選擇配置好的這個數(shù)據(jù)源

這里選擇具體的數(shù)據(jù)指標儀表盤中就會畫出對應(yīng)的折線

不同的儀表盤模式供選擇

4溯壶、安裝Alertmanager

1)?docker pull docker.io/prom/alertmanager:latest

2)?docker run -d -p 9093:9093 -v /tmp/prometheus/alermanager/alertmanager.yml:/etc/alertmanager/config.yml --name alertmanager docker.io/prom/alertmanager:latest

a及皂、alertmanager.yml?

(base) mengfaniaodeMBP:alermanager mengfanxiao$ cat alertmanager.yml?

# 全局配置項

global:?

? resolve_timeout: 5m #處理超時時間,默認為5min

? smtp_smarthost: 'smtp.sina.com:25' # 郵箱smtp服務(wù)器代理

? smtp_from: '******@sina.com' # 發(fā)送郵箱名稱

? smtp_auth_username: '******@sina.com' # 郵箱名稱

? smtp_auth_password: '******' # 郵箱密碼或授權(quán)碼

? wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企業(yè)微信地址

# 定義模板信心

templates:

? - 'template/*.tmpl'

# 定義路由樹信息

route:

? group_by: ['alertname'] # 報警分組依據(jù)

? group_wait: 10s # 最初即第一次等待多久時間發(fā)送一組警報的通知

? group_interval: 10s # 在發(fā)送新警報前的等待時間

? repeat_interval: 1m # 發(fā)送重復(fù)警報的周期 對于email配置中且改,此項不可以設(shè)置過低验烧,否則將會由于郵件發(fā)送太多頻繁,被smtp服務(wù)器拒絕

? receiver: 'email' # 發(fā)送警報的接收者的名稱又跛,以下receivers name的名稱

# 定義警報接收者信息

receivers:

? - name: 'email' # 警報

? ? email_configs: # 郵箱配置

? ? - to: '******@163.com'? # 接收警報的email配置

? ? ? html: '{{ template "test.html" . }}' # 設(shè)定郵箱的內(nèi)容模板

? ? ? headers: { Subject: "[WARN] 報警郵件"} # 接收郵件的標題

? ? # 第三方開發(fā)配置

?? ? #webhook_configs: # webhook配置

? ? #- url: 'http://127.0.0.1:5001'

? ? #send_resolved: true

? ? #wechat_configs: # 企業(yè)微信報警配置

? ? #- send_resolved: true

?? ? #to_party: '1' # 接收組的id

? ? ? #agent_id: '1000002' # (企業(yè)微信-->自定應(yīng)用-->AgentId)

? ? ? #corp_id: '******' # 企業(yè)信息(我的企業(yè)-->CorpId[在底部])

? ? ? #api_secret: '******' # 企業(yè)微信(企業(yè)微信-->自定應(yīng)用-->Secret)

? ? ? #message: '{{ template "test_wechat.html" . }}' # 發(fā)送消息模板的設(shè)定

# 一個inhibition規(guī)則是在與另一組匹配器匹配的警報存在的條件下碍拆,使匹配一組匹配器的警報失效的規(guī)則。兩個警報必須具有一組相同的標簽。?

inhibit_rules:?

? - source_match:?

?? ? severity: 'critical'?

? ? target_match:?

?? ? severity: 'warning'?

? ? equal: ['alertname', 'dev', 'instance']

b感混、test.tmpl?

(base) mengfaniaodeMBP:template mengfanxiao$ cat test.tmpl?

{{ define "test.html" }}

<table border="1">

? ? ? ? <tr>

? ? ? ? ? ? ? ? <td>報警項</td>

? ? ? ? ? ? ? ? <td>實例</td>

? ? ? ? ? ? ? ? <td>報警閥值</td>

? ? ? ? ? ? ? ? <td>開始時間</td>

? ? ? ? </tr>

? ? ? ? {{ range $i, $alert := .Alerts }}

? ? ? ? ? ? ? ? <tr>

? ? ? ? ? ? ? ? ? ? ? ? <td>{{ index $alert.Labels "alertname" }}</td>

? ? ? ? ? ? ? ? ? ? ? ? <td>{{ index $alert.Labels "instance" }}</td>

? ? ? ? ? ? ? ? ? ? ? ? <td>{{ index $alert.Annotations "value" }}</td>

? ? ? ? ? ? ? ? ? ? ? ? <td>{{ $alert.StartsAt }}</td>

? ? ? ? ? ? ? ? </tr>

? ? ? ? {{ end }}

</table>

{{ end }}

3) 驗證啟動結(jié)果

這里可看到 Prometheus sever 端發(fā)過來的 alerts端幼,并可做 alerts 搜索,分組弧满,靜音等操作

二婆跑、遺留問題下次解析

1、告警相關(guān)

a庭呜、promtheus的alert頁面沒有顯示告警配置?

b滑进、node正常運行的時候?promtheus的alert頁面沒有顯示

c、node停止運行時?promtheus的alert頁面沒有顯示且alertmanage沒有收到告警

d募谎、alertmanager還沒有配置receiver信息

2扶关、簡述各個組件是干什么的

3、簡述原理及應(yīng)用場景

a数冬、簡述原理

b节槐、應(yīng)用場景

4、docker host模式解析

參考資料

1拐纱、https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-prometheus-getting-started-and-practice/index.html

2铜异、http://www.reibang.com/p/7f586b482c44?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市戳玫,隨后出現(xiàn)的幾起案子熙掺,更是在濱河造成了極大的恐慌,老刑警劉巖咕宿,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件币绩,死亡現(xiàn)場離奇詭異,居然都是意外死亡府阀,警方通過查閱死者的電腦和手機缆镣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來试浙,“玉大人董瞻,你說我怎么就攤上這事√锇停” “怎么了钠糊?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長壹哺。 經(jīng)常有香客問我抄伍,道長,這世上最難降的妖魔是什么管宵? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任截珍,我火速辦了婚禮攀甚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岗喉。我一直安慰自己秋度,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布钱床。 她就那樣靜靜地躺著荚斯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诞丽。 梳的紋絲不亂的頭發(fā)上鲸拥,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音僧免,去河邊找鬼。 笑死捏浊,一個胖子當(dāng)著我的面吹牛懂衩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播金踪,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浊洞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胡岔?” 一聲冷哼從身側(cè)響起法希,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靶瘸,沒想到半個月后苫亦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡怨咪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年屋剑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诗眨。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡唉匾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匠楚,到底是詐尸還是另有隱情巍膘,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布芋簿,位于F島的核電站峡懈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏益咬。R本人自食惡果不足惜逮诲,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一帜平、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梅鹦,春花似錦裆甩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至箍邮,卻和暖如春茉帅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锭弊。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工堪澎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人味滞。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓樱蛤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剑鞍。 傳聞我的和親對象是個殘疾皇子昨凡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容