此文章已解决的问题
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
是告警恢复时间,北京时间;