一、環(huán)境搭建
1、安裝Node?exporter
1)?a、mac 安裝?brew install node_exporter
b、啟動(dòng)?node_exporter
node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"
c、訪問啟動(dòng)頁面
node_boot_time:系統(tǒng)啟動(dòng)時(shí)間
node_cpu:系統(tǒng)CPU使用量
nodedisk*:磁盤IO
nodefilesystem*:文件系統(tǒng)用量
node_load1:系統(tǒng)負(fù)載
nodememeory*:內(nèi)存使用量
nodenetwork*:網(wǎng)絡(luò)帶寬
node_time:當(dāng)前系統(tǒng)時(shí)間
go_*:node exporter中g(shù)o相關(guān)指標(biāo)
process_*:node exporter 自身進(jìn)程相關(guān)運(yùn)行指標(biāo)
2) docker啟動(dòng)
a、docker pull prom/node-exporter
b、docker run -d --name=node? -p 9100:9100 prom/node-exporter:latest
c、驗(yàn)證啟動(dòng)結(jié)果
2、安裝Prometheus
1)?docker pull prom/prometheus
2)啟動(dòng)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']? # 本機(jī) node_exporter 的 endpoint 這里若配置成127.0.0.1 會(huì)出現(xiàn)gramtheus訪問node不通問題
b、prometheus_rules.yml?
(base) mengfaniaodeMBP:prometheus mengfanxiao$ cat prometheus_rules.yml?
groups:
- name: example ? #報(bào)警規(guī)則的名字
? rules:
? # Alert for any instance that is unreachable for >5 minutes.
? - alert: InstanceDown ? ? #檢測(cè)job的狀態(tài),持續(xù)1分鐘metrices不能訪問會(huì)發(fā)給altermanager進(jìn)行報(bào)警
? ? expr: up == 0
? ? for: 1m? ? #持續(xù)時(shí)間
? ? 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"? #報(bào)警的名字
? ? 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" ? # 這個(gè)意思是監(jiān)控該表達(dá)式查詢出來的值與一周前的值進(jìn)行比較,大于5且持續(xù)10m鐘就發(fā)送給altermanager進(jìn)行報(bào)警
? ? for: 1m? #持續(xù)時(shí)間
? ? labels:
? ? ? serverity: warning
? ? annotations:
? ? ? summary: "{{ $labels.type }}趨勢(shì)增高"
? ? ? description: "機(jī)器:{{ $labels.host }} tomcat_id:{{ $labels.id }} 類型:{{ $labels.type }} 與一周前的差值大于5,當(dāng)前的差值為:{{ $value }}"? ? #自定義的報(bào)警內(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高級(jí)查詢來設(shè)定
?? ? for: 2m # 滿足告警條件持續(xù)時(shí)間多久后,才會(huì)發(fā)送告警
?? ? labels: #標(biāo)簽項(xiàng)
? ? ? team: node
?? ? annotations: # 解析項(xiàng),詳細(xì)解釋告警信息
? ? ? 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高級(jí)查詢來設(shè)定
?? ? for: 2m # 滿足告警條件持續(xù)時(shí)間多久后,才會(huì)發(fā)送告警
?? ? labels: #標(biāo)簽項(xiàng)
? ? ? team: node
?? ? annotations: # 解析項(xiàng),詳細(xì)解釋告警信息
? ? ? summary: "{{$labels.instance}}: has been down"
? ? ? description: "{{$labels.instance}}: job {{$labels.job}} has been down "
? ? ? value: {{$value}}
3)
a、驗(yàn)證是否啟動(dòng)成功
b、prometheus的數(shù)據(jù)
c、看配置的2個(gè)數(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是可以的
原因是:
容器具有單獨(dú)的網(wǎng)絡(luò)名稱空間,這意味著容器中的127.0.0.1在主機(jī)上不是127.0.0.1。
您應(yīng)該使用主機(jī)的IP或使用--network = host啟動(dòng)容器。
host模式下使用-p或者-P會(huì)出現(xiàn)WARNING: Published ports are discarded when using host network mode 當(dāng)你是host模式的時(shí)候,主機(jī)會(huì)自動(dòng)把他上面的端口分配給容器,這個(gè)時(shí)候使用-p或者-P是無用的。但是還是可以在Dockerfile中聲明EXPOSE端口?后續(xù)文章再詳談
3、安裝grafana
1)docker pull grafana/grafana
2)查看下載情況
docker images|grep grafana/grafana
3)創(chuàng)建一個(gè)grafana/grafana容器并啟動(dòng)
docker run -d --name=grafana -p 3000:3000 grafana/grafana
4)訪問啟動(dòng)頁面
默認(rèn)賬號(hào)admin/admin
5)登陸了之后 配置數(shù)據(jù)源
數(shù)據(jù)源配置好之后 創(chuàng)建儀表盤用于顯示數(shù)據(jù)源的數(shù)據(jù)
選擇配置好的這個(gè)數(shù)據(jù)源
這里選擇具體的數(shù)據(jù)指標(biāo)儀表盤中就會(huì)畫出對(duì)應(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?
# 全局配置項(xiàng)
global:?
? resolve_timeout: 5m #處理超時(shí)時(shí)間,默認(rèn)為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'] # 報(bào)警分組依據(jù)
? group_wait: 10s # 最初即第一次等待多久時(shí)間發(fā)送一組警報(bào)的通知
? group_interval: 10s # 在發(fā)送新警報(bào)前的等待時(shí)間
? repeat_interval: 1m # 發(fā)送重復(fù)警報(bào)的周期 對(duì)于email配置中,此項(xiàng)不可以設(shè)置過低,否則將會(huì)由于郵件發(fā)送太多頻繁,被smtp服務(wù)器拒絕
? receiver: 'email' # 發(fā)送警報(bào)的接收者的名稱,以下receivers name的名稱
# 定義警報(bào)接收者信息
receivers:
? - name: 'email' # 警報(bào)
? ? email_configs: # 郵箱配置
? ? - to: '******@163.com'? # 接收警報(bào)的email配置
? ? ? html: '{{ template "test.html" . }}' # 設(shè)定郵箱的內(nèi)容模板
? ? ? headers: { Subject: "[WARN] 報(bào)警郵件"} # 接收郵件的標(biāo)題
? ? # 第三方開發(fā)配置
?? ? #webhook_configs: # webhook配置
? ? #- url: 'http://127.0.0.1:5001'
? ? #send_resolved: true
? ? #wechat_configs: # 企業(yè)微信報(bào)警配置
? ? #- 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è)定
# 一個(gè)inhibition規(guī)則是在與另一組匹配器匹配的警報(bào)存在的條件下,使匹配一組匹配器的警報(bào)失效的規(guī)則。兩個(gè)警報(bào)必須具有一組相同的標(biāo)簽。?
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>報(bào)警項(xiàng)</td>
? ? ? ? ? ? ? ? <td>實(shí)例</td>
? ? ? ? ? ? ? ? <td>報(bào)警閥值</td>
? ? ? ? ? ? ? ? <td>開始時(shí)間</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) 驗(yàn)證啟動(dòng)結(jié)果
這里可看到 Prometheus sever 端發(fā)過來的 alerts,并可做 alerts 搜索,分組,靜音等操作
二、遺留問題下次解析
1、告警相關(guān)
a、promtheus的alert頁面沒有顯示告警配置?
b、node正常運(yùn)行的時(shí)候?promtheus的alert頁面沒有顯示
c、node停止運(yùn)行時(shí)?promtheus的alert頁面沒有顯示且alertmanage沒有收到告警
d、alertmanager還沒有配置receiver信息
2、簡(jiǎn)述各個(gè)組件是干什么的
3、簡(jiǎn)述原理及應(yīng)用場(chǎng)景
a、簡(jiǎn)述原理
b、應(yīng)用場(chǎ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.itdecent.cn/p/7f586b482c44?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com