利用docker快速部署prometheus
[TOC]
配置过程
部署prometheus
- 第1步,安装docker环境
curl -sL 'http://iso.sqlfans.cn/docker/install_docker_2401.sh' | bash
curl -sL 'http://iso.sqlfans.cn/docker/install_docker_compose_2181.sh' | bash
docker-compose --version
- 第2步,准备配置文件
mkdir -p /data/docker/prometheus/{alertmanager,prometheus_etc/rules,dingtalk/templates}
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/docker-compose.yml -o /data/docker/prometheus/docker-compose.yml
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/black_box_config.yml -o /data/docker/prometheus/black_box_config.yml
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/prometheus_etc/prometheus.yml -o /data/docker/prometheus/prometheus_etc/prometheus.yml
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/prometheus_etc/rules/alert.rules -o /data/docker/prometheus/prometheus_etc/rules/alert.rules
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/dingtalk/config.yml -o /data/docker/prometheus/dingtalk/config.yml
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/dingtalk/templates/templates.tmpl -o /data/docker/prometheus/dingtalk/templates/templates.tmpl
curl -sL http://iso.sqlfans.cn/docker/yml/prometheus/alertmanager/alertmanager.yml -o /data/docker/prometheus/alertmanager/alertmanager.yml
# [优化] 替换为我司的harbor镜像,避免无法访问github导致的超时问题
# sed -i "s/image: /image: harbor-dev.fusionfintrade.com:6443\/ops\//" /data/docker/prometheus/docker-compose.yml
- 第3步,调整要监控的资源
cat /data/docker/prometheus/prometheus_etc/prometheus.yml | egrep "(http|10.)"
- 第4步,启动容器 prometheus v2.43.1
chmod 777 -R /data/docker/prometheus
docker-compose -f /data/docker/prometheus/docker-compose.yml down
docker-compose -f /data/docker/prometheus/docker-compose.yml up -d
#.如果有容器状态为Restarting,可尝试重复执行上面3条命令
cd /data/docker/prometheus
docker-compose ps -a
- 第5步,登录控制台,将
127.0.0.1
改为实际的ip地址
地址:http://127.0.0.1:3000/login
账号:admin
初始密码:cat /data/docker/prometheus/docker-compose.yml | grep PASSWORD
重置命令:docker exec -it grafana /bin/bash -c 'grafana-cli admin reset-admin-password Admin_147'
重置密码:Admin_147
导入自定义模板
这里演示如何导入一个自定义的模板(只有http状态码之类的pull监控,cpu内存等需要客户端主动push所以并未配置)为例,详细步骤如下:
#.监控指标如下
TCP响应时间检测,比如 192.168.3.9:3389
UDP响应时间检测,比如 192.168.4.168:1194
icmp检测,比如 ping 223.5.5.5
http检测,比如 https://www.baidu.com 包括连通性、响应时间、http状态码、证书有效期等
- 第1步,登录控制台,依次选择
Home - Connections - Your connections - Data sources
,点击 Add data source,选择类型为 Prometheus 的数据源,将其命名为 Prometheus、配置URL为http://prometheus:9090
,保存并退出 - 第2步,依次选择:Home - Administration - Service accounts - 点击 Add service account,输入名称:apikey,角色:Admin,然后点击 Create
- 第3步,在弹出的页面,点击 Add service account token,输入名称:apikey,然后点击 Generate token,在弹出的页面 Copy clipboard 该token,比如:
glsa_XKrkMpHxzbzntaWtgGi10SRqP3ZzEJT2_5e84f036
- 第4步,调用 Grafana API 获取 Prometheus 这个 datasource 的 uid
[root@localhost ~]# addr=127.0.0.1:3000
[root@localhost ~]# token=glsa_XKrkMpHxzbzntaWtgGi10SRqP3ZzEJT2_5e84f036
[root@localhost ~]# curl -s -X GET -H "Authorization: Bearer $token" http://$addr/api/datasources/name/Prometheus | python -m json.tool | grep uid
"uid": "b6901334-50d6-433b-9fa6-1d7a900450a9",
- 第5步,下载提前制作的 自定义的json模板 到本地
- 第6步,依次选择
Home - Dashboards
,点击右上角的 +,选择 Import dashboard,导入下载的模板文件 - 第7步,在新导入的 Dashboard 页面,点击右上角的 Dashboard Settings - JSON Model - 替换datasource类型为prometheus中的uid为 Grafana API 获取获取的uid,然后点击 Save changes
"datasource": {
"type": "prometheus",
"uid": "b6901334-50d6-433b-9fa6-1d7a900450a9"
}
- 第8步,返回Dashboards首页,确认监控已ok
配置钉钉告警
- 第1步,创建钉钉群聊(比如
测试群
),添加机器人 选择 自定义(通过Webhook接入自定义服务),保存 Webhook地址
机器人名字:事件通知
接收群组:测试群
消息推送:开启
Webhook:https://oapi.dingtalk.com/robot/send?access_token=3da7216e1c31362935f55c5ccfae23b3a307a799c4eed13ec560ec3a6a5b832c
安全设置:
自定义关键词:
加签:
IP地址(端):103.25.65.102 #.部署prometheus的服务器出口ip
- 第2步,测试一下钉钉消息推送
url=https://oapi.dingtalk.com/robot/send?access_token=3da7216e1c31362935f55c5ccfae23b3a307a799c4eed13ec560ec3a6a5b832c
curl $url -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": {"content": "钉钉机器人群消息测试"}}'
- 第3步,修改配置文件
./dingtalk/config.yml
,替换url为上面的 Webhook地址,无需重启服务,即刻生效
[root@localhost ~]# cat /data/docker/prometheus/dingtalk/config.yml | grep url
url: https://oapi.dingtalk.com/robot/send?access_token=3da7216e1c31362935f55c5ccfae23b3a307a799c4eed13ec560ec3a6a5b832c
遇到的问题
- 问题1:如何全部铲掉
docker-compose -f /data/docker/prometheus/docker-compose.yml down
docker rmi -f $(docker images | grep ops | awk '{print $3}')
rm -rf /data/docker/prometheus
- 问题2:启动容器提示 permission denied
错误:执行 docker logs -f prometheus 看到 active err="open /prometheus/queries.active: permission denied"
解决:执行 chmod -R 777 /data/docker/prometheus 然后重启容器
- 问题3:导入模板之后提示 Failed to upgrade legacy queries Datasource xxx was not found
错误:导入json格式的dashboards模板之后,打开dashboards报错 Failed to upgrade legacy queries Datasource xxx was not found
解决:将 json 文件中所有的 uid更换为当前监控数据的数据源名称,然后再将其导入
"datasource": { "type": "prometheus", "uid": "PSDF93FB590B2093" },