Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警

admin 2025-01-05 298人围观 ,发现5个评论
前言特点

成熟稳定且强大

丰富的插件,大部分情况都能满足

轻量级部署,资源占用少

使用情况

主要用来作为监控面板使用

使用Grafana监控:linux,windows,redis,clickhouse,mongodb,mysql,RabbitMQ,站点情况

使用Grafana设置告警当服务出现无法访问时通知到企业微信群

Grafana版本问题,可能存在面板失效,需要做一些调整

使用dockercompose安装Prometheus配置文件说明

prometheus版本:

指定运行参数:

启动配置文件路径:'--=/etc/prometheus/'

数据存储目录:'--=/prometheus'

数据保留时间:'--=30d'

允许使用curl-XPOST``http://localhost:9090/-/reload重载其配置:'--'

指定web控制台配置,添加了账号密码:'--=/etc/prometheus/'

开放端口:9090

指定网络:devopsnetwork(dockernetworkcreatedevopsnetwork)

挂载配置文件及数据目录,需要对数据目录进行创建及赋予权限:mkdirprometheus_datachown65534./prometheus_data关于持久化权限的讨论

用到了三个配置文件:

dockercompose文件:

version:'3.1'services:prometheus:restart:alwayscontainer_name:prometheusimage:prom/prometheus::指定web面板账号密码访问-'--=/etc/prometheus/'数据保留时间-'--=30d'需要权限mkdirprometheus_datachown65534./prometheus_data-./:/etc/prometheus//prometheus_data:/prometheus-./:/etc/prometheus/:-9090:9090networks:-devopsnetworknetworks:devopsnetwork:external:true

prometheus配置文件示例:,

指定了prometheus,并设置了访问密码rootdevops666

global:scrape_interval:15sAttachtheselabelstoanytimeseriesoralertswhencommunicatingwithAscrapeconfigurationcontainingexactlyonepointtoscrape:启用了账号密码_auth_users需要配置basic_auth:username:rootpassword:devops666

web控制台配置:

指定账号密码rootdevops666

basic_auth_users:root:$2a$10$c6OOt9f6LuhiabPyW0nkNOprb1ndQ/HHSfqjB/exe7yh5FaYUqvBy

启动:dockercomposeup-d

Prometheus指定账号密码访问

设置https或基础密码验证文档

要启用web面板账号密码访问,指定web访问配置文件'--=/etc/prometheus/'

映射指定账号密码rootdevops666,Prometheus密码需要使用htpasswd生成bcrypt密码在线生成工具

basic_auth_users:root:$2a$10$

如果需要使用Prometheus监听Prometheus,并且Prometheus启用了身份验证,需要在配置出增加basic_auth配置节

scrape_configs:-job_name:'prometheus'scrape_interval:5sstatic_configs:-targets:['localhost:9090']自行修改成你的域名ssl_certificate/certs//;ssl_certificate_key/certs//;ssl_session_cacheshared:SSL:1m;ssl_session_timeout5m;ssl_ciphersHIGH:!aNULL:!MD5;ssl_prefer_server_cipherson;location/{proxy_passhttp://prometheus:9090;proxy_http_;proxy_bufferingoff;proxy_request_bufferingoff;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"upgrade";proxy_set_headerHost$host;proxy_set_headerX-Forwarded-For$remote_addr;}}
安装成功

根据上面的配置,完成了Prometheus的搭建,监听本身Prometheus的情况

通过使用账号密码rootdevops666登陆后即可

使用dockercompose安装Grafana

Grafana是一个开源的数据可视化和监控平台,它提供了丰富的图表和面板,用于展示各种指标和数据。提到Prometheus,Grafana自然是不不能落下,基于官方和社区,可以很快的制作出监控可视化面板,助力日常运维检测

配置文件说明

grafana版本:

指定账号密码:rootdevops666

端口映射:3000

挂载数据目录./grafana_data,需要赋予权限:mkdir-pgrafana_datachown-R472:472./grafana_data

指定网络为devopsnetwork(dockernetworkcreatedevopsnetwork)

dockercompose文件:,安装替换版本号即可

version:'3.1'services:grafana:restart:alwayscontainer_name:grafanaimage:grafana/grafana:10.2.0ports:-"3000:3000"volumes:-./grafana_data:/var/lib/grafanaenvironment:-GF_SECURITY_ADMIN_USER=root-GF_SECURITY_ADMIN_PASSWORD=devops666-GF_USERS_ALLOW_SIGN_UP=falsenetworks:-devopsnetworknetworks:devopsnetwork:external:true

启动:dockercomposeup-d

添加nginx配置
server{listen80;listen443ssl;server_;global:scrape_configs:-job_name:'linux'global:scrape_configs:-job_name:'win-node'其他配置location=/stub_status{stub_status;}}

指定映射端口:9113

docker运行nginx-prometheus-exporter

dockerrun-d-p9113:9113\--namenginx_exporter\--restartalways\nginx/nginx-prometheus-exporter:0.11--=

运行使用IP+9113端口访问即可:

将其配置到

-job_name:'nginx'Themysqld_exporterhost:portreplacement:192.168.123.214:9104

重载配置后生效curl-XPOST-uroot:devops666``http://localhost:9090/-/reload

导入Grafana面板11329

MongoDB监控配置

Prometheus组件:mongodb_

Grafana面板推荐:

MongoDBID:14997部分图表无效

MongoDB数据源插件需要企业版才能使用

docker运行mongodb_exporter监听单机实例

指定配置文件-./config:/etc/clickhouse-server
使用数据源插件监控

Grafana启用数据源clickhouse插件

配置数据源需要开启9000端口

启用默认仪表盘

预览效果

Redis监控配置

Prometheus组件:redis_

配置参考

端口:单机9121:9121,集群9122:9121

Grafana面板推荐:

RedisExporterQuickstartandDashboard:ID14091

RedisDashboardforPrometheusRedisExporter:ID11835

Redis数据源插件面板:ID12776

redis_exporter单机监控

docker运行oliver006/redis_exporter指定端口9121

通过--来指定地址和密码

配置文件-'--=/config/'volumes:_sd_configs:-names:-:Aport:443relabel_configs:-source_labels:[__address__]target_label:__param_targetreplacement::[__meta_dns_name]target_label:instance-target_label:__address__replacement:192.168.123.214:9115Makedomainnamebecome'Host'headerforproberequests-source_labels:[__meta_dns_name]target_label:vhost匹配apollo,需要访问/health检查状态-source_labels:[__param_hostname]regex:'apollo.*'target_label:__param_targetreplacement:,问的gpt,还真行-source_labels:[__param_hostname]regex:'prometheus.*'target_label:__param_targetreplacement:https://root:devops666@192.168.123.214:443

重载prometheus配置生效

导入面板13659监控效果

导入面板9719监控效果

导入面板9965监控效果

Grafana监控告警设置

通过设置Alertrules(预警规则),匹配到有指标符合规则时,就会根据Notificationpolicies(通知策略)进行消息发送,发送的内容和模板在Contactpoints(通知方式)设置

下面完成一个实际的使用场景:检测RabbitMQ面板状态,服务不可用时进行预警,通过企业微信机器人进行群通知

设置预警规则

添加规则名称:RabbitMQ监控

选择数据源:Prometheus

设置指标条件:内存使用字节erlang_mnesia_memory_usage_bytes并指定job是rabbitmq

设置预警条件:内存值小于1(无效)时进行通知

设置检查规则,30s检查一次,30s等待期,立刻通知

Pingperiod等待期:如果警报条件不再满足,警报规则将会恢复到正常状态,而不会触发警报

这个和默认的通知策略还有关系,需要结合使用,默认是30s,5分钟等待期,4小时内不重复发送可根据需要修改

设置提醒信息及服务地址

设置通知策略

可以通过修改重复间隔,重新发送通知

设置告警模板

Grafana使用Go模板语言来创建通知消息,可根据文档自行编写,另外一个aws的中文文档可以参考

结合文档写的一个通知模板

{{define"DevOpsTemplate"-}}{{-}}{{-}}{{"summary"}}**{{"预警消息"}}**:{{.Value}}{{--}}{{}}{{-}}{{"runbook_url"}}**{{"服务地址"}}**:{{.Value}}{{--}}{{}}**{{"预警分组"}}**:{{._folder}}**{{"开始时间"}}**:{{(.).Format"2006-01-0215:04:05"}}**{{"预警参数"}}**:{{}}{{.Name}}:{{.Value}}{{}}{{-}}{{-ifand("summary")("runbook_url")-}}{{.Name}}:{{.Value}}{{}}{{}}{{--}}{{--}}
设置通知方式

支持多种通知,根据需要配置,这里以企业微信机器人为例

需要通过告警快速定位问题,实际应用中肯定是需要将告警实例及其信息一并通知,所以还需要结合告警模板和规则进行消息的发送。使用模板语法指定前面设置的模板

设置完成后,当预警规则设置页面出现异常提示时,就会进行提示了

踩坑记录

安装官方文档运行后,提示无权限,需要赋予挂载目录权限:chown65534./prometheus_data

权限在之前的使用中使用777权限,能够解决,但是很明显不是最佳方案,然后好好找了下,最后发现这个问题很久就有人提出pr,只是一直没有被合并,大概下个版本就可以了,关于持久化权限的讨论

basic_auth修改后,重载配置是无效的,需要重新启动后才生效



redis使用redis_exporter,监控多个如果有密码,没有密码,密码不一样的实例需要分开运行配置

mongodb的监控始终不是很完美

站点监控的证书验证和密码验证反反复复尝试了很久,以下为主要踩坑的地方

配置blackboxjob的paramsmodule只能有一个,多个只会第一个生效

blackbox配置的证书可以是pem,无效转换成crt格式,配置:ca_file:/config/

basic_auth配置不需要再配置job,可以直接使用特殊的url格式:https://root:devops666@192.168.123.214:443

Grafana服务重启后,nginx代理域名访问一直502,IP可以访问,重启nginx后就可以访问了

Grafana的通知模板语法,可参考文档

2.循环预警消息{{}}/**/{{}}4.删除空格和换行符{{}}{{}}{{.Name}}={{.Value}}{{}}{{}}5.if判断{{"runbook_url"}}#6.时区问题,+8设置**{{"开始时间"}}**:{{(.).Format"2006-01-0215:04:05"}}
相关文档

PrometheusGithub

Prometheus官方文档

PrometheusBcrypt密码生成

Prometheus配置文件参考示例

Prometheus数据持久化权限的讨论

GrafanaGithub

Grafana面板检索

Grafana通知模板中文文档

Prometheus+Grafana+Alertmanager实现告警推送教程

Grafana新手教程-实现仪表盘创建和告警推送****

后语
猜你喜欢
    不容错过