前言
Prometheus 是一个开放性的监控解决方案,通过各种 Exporter 采集当前主机/服务的数据,和 Grafana 相结合可以实现强大的监控和可视化功能
本篇将分享使用 docker compose 构建 Prometheus+Grafana,并监控之前文章所搭建的主机&服务,分享日常使用的一些使用经验
文章较长,已安装可略过,推荐先看第三节 常用服务的 Prometheus+Grafana 配置
特点
- 成熟稳定且强大
- 丰富的插件,大部分情况都能满足
- 轻量级部署,资源占用少
使用情况
- 主要用来作为监控面板使用
- 使用 Grafana 监控:linux ,windows,redis,clickhouse,mongodb,mysql, RabbitMQ,站点情况
- 使用 Grafana 设置告警当服务出现无法访问时通知到企业微信群
- Grafana 版本问题,可能存在面板失效,需要做一些调整
使用 docker compose 安装 Prometheus
配置文件说明
-
prometheus 版本:v2.47.2
-
指定运行参数:
- 启动配置文件路径:
'--config.file=/etc/prometheus/prometheus.yml'
- 数据存储目录:
'--storage.tsdb.path=/prometheus'
- 数据保留时间:
'--storage.tsdb.retention.time=30d'
- 允许使用
curl -X POST ``http://localhost:9090/-/reload
重载其配置:'--web.enable-lifecycle'
- 指定 web 控制台配置,添加了账号密码:
'--web.config.file=/etc/prometheus/web-config.yml'
- 启动配置文件路径:
-
开放端口:9090
-
指定网络:devopsnetwork (
docker network create devopsnetwork
) -
挂载配置文件及数据目录,需要对数据目录进行创建及赋予权限:
mkdir prometheus_data && chown 65534 ./prometheus_data
关于持久化权限的讨论 -
用到了三个配置文件:compose.yml prometheus.yml web-config.yml
-
docker compose 文件:compose.yml
version: '3.1'
services:
prometheus:
restart: always
container_name: prometheus
image: prom/prometheus:v2.47.2
command:
# 配置文件
- '--config.file=/etc/prometheus/prometheus.yml'
# 指定web面板账号密码访问
- '--web.config.file=/etc/prometheus/web-config.yml'
# 数据目录
- '--storage.tsdb.path=/prometheus'
# 数据保留时间
- '--storage.tsdb.retention.time=30d'
# 运行使用 curl -X POST http://localhost:9090/-/reload 重载其配置
- '--web.enable-lifecycle'
volumes:
# 需要权限 mkdir prometheus_data && chown 65534 ./prometheus_data
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus_data:/prometheus
- ./web-config.yml:/etc/prometheus/web-config.yml
ports:
- 9090:9090
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
-
prometheus 配置文件示例:prometheus.yml,
- 指定了 prometheus ,并设置了访问密码 root devops666
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# 启用了账号密码 web-config.yml basic_auth_users 需要配置
basic_auth:
username: root
password: devops666
-
web 控制台配置:web-config.yml
- 指定账号密码 root devops666
basic_auth_users:
root: $2a$10$c6OOt9f6LuhiabPyW0nkNOprb1ndQ/HHSfqjB/exe7yh5FaYUqvBy
- 启动:
docker compose up -d
Prometheus 指定账号密码访问
- 设置 https 或基础密码验证文档
- 要启用 web 面板账号密码访问,指定 web 访问配置文件
'--web.config.file=/etc/prometheus/web-config.yml'
- 映射 web-config.yml 指定账号密码 root devops666 ,Prometheus 密码需要使用 htpasswd 生成 bcrypt 密码 在线生成工具
basic_auth_users:
root: $2a$10$kmkC.lHR3Kwl19DE9l1KRerMDinEejEbNmJigrJZYAGkgzbVBUpa2
- 如果需要使用 Prometheus 监听 Prometheus ,并且 Prometheus 启用了身份验证,需要在配置出增加 basic_auth 配置节
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# 启用了账号密码 web-config.yml basic_auth_users 需要配置
basic_auth:
username: root
password: devops666
-
掉坑里去了,如果一开始 basic_auth 没有配置对,重载配置是无效的,需要重启
重载配置
修改了配置文件后,可以使用 api 接口重载配置,如果启用了账号密码可以使用 -u 参数指定(basic_auth 修改重载配置无效),没有就不需要加 -u 参数
curl -X POST http://localhost:9090/-/reload
或
curl -X POST -u root:devops666 http://localhost:9090/-/reload
添加 nginx 配置
还不会在局域网申请 ssl 及配置的可以参考之前的文章 前后端都用得上的 Nginx 日常使用经验
server {
listen 80;
listen 443 ssl;
server_name prometheus.devops.test.com; # 自行修改成你的域名
ssl_certificate /certs/prometheus.devops.test.com/server.crt;
ssl_certificate_key /certs/prometheus.devops.test.com/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://prometheus:9090;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
安装成功
根据上面的配置,完成了 Prometheus 的搭建,监听本身 Prometheus 的情况
通过https://prometheus.devops.test.com/
使用账号密码 root devops666 登陆后即可
使用 docker compose 安装 Grafana
Grafana 是一个开源的数据可视化和监控平台,它提供了丰富的图表和面板,用于展示各种指标和数据。提到 Prometheus,Grafana 自然是不不能落下,基于官方和社区,可以很快的制作出监控可视化面板,助力日常运维检测
配置文件说明
- grafana 版本:v10.2.0
- 指定账号密码: root devops666
- 端口映射:3000
- 挂载数据目录 ./grafana_data, 需要赋予权限:
mkdir -p grafana_data && chown -R 472:472 ./grafana_data
- 指定网络为 devopsnetwork(
docker network create devopsnetwork
) - docker compose 文件:compose.yml ,安装 v10.2.0 替换版本号即可
version: '3.1'
services:
grafana:
restart: always
container_name: grafana
image: grafana/grafana:10.2.0
ports:
- "3000:3000"
volumes:
- ./grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=root
- GF_SECURITY_ADMIN_PASSWORD=devops666
- GF_USERS_ALLOW_SIGN_UP=false
networks:
- devopsnetwork
networks:
devopsnetwork:
external: true
- 启动:
docker compose up -d
添加 nginx 配置
server {