此文章已解決的問題
1.Prometheus Server開啟basic認證、配置熱加載
2.InfluxDB開啟basic認證
3.更改InfluxDB存儲策略
4.Grafana插件離線安裝
5.Alertmanager發送告警消息,時間均為北京時間
Prometheus Server
默認端口9090
下載prometheus鏡像
docker pull prom/prometheus:v2.33.4
運行容器
docker run -dit --network=host --restart=always -v prometheus-conf:/etc/prometheus/ -v prometheus-data:/prometheus --name=prom prom/prometheus:v2.33.4
Prometheus開啟Basic認證、開啟配置文件熱加載
下載的Prometheus鏡像默認是不提供Basic認證、未開啟配置文件熱加載,需要我們重新構建鏡像。
基礎的dockerfile來自於github,下面是重寫后的Dockerfile
FROM prom/prometheus:v2.28.0
USER nobody
COPY web.yml /etc/prometheus/
EXPOSE 9090
WORKDIR /prometheus
VOLUME [ "/prometheus" ]
ENTRYPOINT [ "/bin/prometheus" ]
CMD ["--config.file=/etc/prometheus/prometheus.yml","--web.enable-lifecycle","--storage.tsdb.path=/prometheus","--web.console.libraries=/usr/share/prometheus/console_libraries","--web.console.templates=/usr/share/prometheus/consoles","--web.config.file=/etc/prometheus/web.yml","--storage.tsdb.retention.time=20d"]
解析:
--web.config.file=/etc/prometheus/web.yml
:認證的文件,文件內包含用戶名和加密后的密碼。
--web.enable-lifecycle
:開啟配置文件熱加載
配置熱加載命令
curl -XPOST -u aaaaa:123\!@# http://192.168.1.101:9090/-/reload
--storage.tsdb.retention.time=20d
:修改Prometheus自帶時序數據庫的存儲時間
如果有別的需要添加的配置項,也可以在此添加。
web.yml內容
basic_auth_users:
prometheus: $2a$12$Q2k1TneTu123KcDFIFWVenTiX1e08a2iTB4l5Aeqf/i5p.3dDELC
密碼生成器地址(或者用htpasswd生成)
https://bcrypt-generator.com/
InfluxDB
默認端口8086
下載influxdb鏡像
docker pull influxdb:1.7.8
運行容器
docker run -dit --network=host -v influxdb-conf:/etc/influxdb/ -v influxdb-data:/var/lib/influxdb --restart=always --name influxdb influxdb:1.7.8
InfluxDB開啟basic認證
進入influxdb,創建數據庫 prometheus
docker exec -it influxdb /bin/bash
root@ca171fb358f1:/# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> show databases
name: databases
name
----
_internal
> create database "prometheus"
> show databases
name: databases
name
----
_internal
prometheus
創建完數據庫后,進行數據庫認證的設置
##首先創建管理員用戶;創建此用戶之前,確認influxdb未開啟身份認證
> CREATE USER aaaaa WITH PASSWORD '123!@#' WITH ALL PRIVILEGES
> SHOW USERS
user admin
aaaaa true
##開啟身份驗證(編輯influxdb配置文件,將auth-enabled配置項的值由false改為true並保存退出)
[http]
enabled = true
bind-address = ":8086"
auth-enabled = true
## 退出容器並重啟
docker restart influxdb
## 帶密碼登陸數據庫;密碼是123!@#,由於密碼中存在"!",故添加"\"將"!"轉義.
influx -username aaaaa -password 123\!@#
設置InfluxDB存儲策略
##新建存儲策略,並設置為默認
CREATE RETENTION POLICY "60_days" ON "prometheus" DURATION 60d REPLICATION 1 DEFAULT
##查看策略
SHOW RETENTION POLICIES ON prometheus
##刪除策略
DROP RETENTION POLICY "60_days" ON "prometheus"
Grafana
默認端口3000
下載鏡像
docker pull grafana/grafana:8.3.7
運行容器
docker run -dit -v grafana:/var/lib/grafana/ --network=host --restart=always --name=grafana grafana/grafana:8.3.7
-v grafana:/var/lib/grafana/
是為了把grafana插件的目錄掛載出來,便於后期離線安裝插件的需要。
插件離線安裝:
插件默認安裝目錄/var/lib/grafana/plugins
##下載頁下載插件zip包
https://grafana.com/grafana/plugins/
##解壓后上傳到plugsins目錄
docker cp xxx grafana:/var/lib/grafana/plugins
##restart
docker restart grafana
AlertManager
下載鏡像
docker pull alertmanager:0.23.0
運行容器
docker run -dit --network=host -v alertmanager:/etc/alertmanager --name=alertmanager alertmanager:0.23.0
-v alertmanager:/etc/alertmanager
存放alertmanager的配置文件以及告警的模板
alertmanager.yml
global:
resolve_timeout: 10s
wechat_api_corp_id: 填寫你的id
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'
wechat_api_secret: 填寫你的secret
templates:
- '/etc/alertmanager/wechat.tmpl'
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1m
receiver: 'wechat'
receivers:
- name: 'wechat'
wechat_configs:
- send_resolved: true
corp_id: 填寫你的id
to_party: '3' #聯系人組ID
agent_id: 1000002 #新建應用的ID
api_secret: 填寫你的secret
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
wechat.tmpl
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
***告警***
告警主機:{{ .Labels.instance }}
告警詳情: {{ .Annotations.description }}
觸發時間: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
*****************************
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
***恢復***
告警主機:{{ .Labels.instance }}
告警詳情: {{ .Annotations.description }}
觸發時間: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢復時間:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
*****************************
{{ end }}{{ end -}}
{{- end }}
.StartsAt.Add 28800e9
是告警觸發時間,北京時間;
.EndsAt.Add 28800e9
是告警恢復時間,北京時間;