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