Prometheus(1)--Prometheus的搭建与配置


此文章已解决的问题

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是告警恢复时间,北京时间;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM