promethues 针对redis集群和负载均衡的监控告警实践
背景:
原来采用的是open falcon监控redis集群和负载均衡组件,全部采用自研程序实现的监控指标采集上报告警,有bug不说,且需要自己维护,看中了promethues强大的exporter和扩展能力。
准备:
下载好如下几个包(截止2020年8月12日的最新稳定版):
-rwx------ 1 root root 119M Aug 10 17:10 go1.14.7.linux-amd64.tar.gz-rwx------ 1 root root 58M Aug 10 17:10 prometheus-2.17.0.linux-amd64.tar.gz-rwx------ 1 root root 428K Aug 10 17:40 nginx-module-vts-master.zip-rwx------ 1 root root 9.6M Aug 10 17:40 nginx-vts-exporter-0.10.3.linux-amd64.tar-rwx------ 1 root root 50M Aug 10 19:07 grafana-7.1.3-1.x86_64.rpm-rwx------ 1 root root 3.6M Aug 11 18:55 redis_exporter-v1.9.0.linux-amd64.tar.gz-rwx------ 1 root root 3.6M Aug 12 20:35 alertmanager-0.21.0.linux-amd64.tar.gz
解释下:
nginx-module-vts-master.zip # nginx扩展模块vts,主要是监控指标强大,可以看到每个upstream的状态nginx-vts-exporter-0.10.3.linux-amd64.tar # vts对应的exporterredis_exporter-v1.9.0.linux-amd64.tar.gz # redis和rediscluster 对应的exporterprometheus-2.17.0.linux-amd64.tar.gz # Prometheus不多说grafana-7.1.3-1.x86_64.rpm # 配合prometheus展示使用alertmanager-0.21.0.linux-amd64.tar.gz # prometheus告警模块
一、nginx监控部署:
1.1、Nginx加载vts模块编译部署启动
./configure --prefix=/app/usr/local/nginx--with-stream --with-http_stub_status_module --with-http_lua_module--with-http_gunzip_module --with-http_ssl_module --with-http_realip_module --add-module=/root/ngx_healthcheck_module-master --add-module=/root/nginx-sticky-module-ng --add-module=modules/ngx_http_upstream_session_sticky_module --add-module=modules/ngx_http_reqstat_module --add-module=modules/ngx_debug_pool --add-module=/root/nginx-module-vts-mastermakemake install
主要是这个:--add-module=/root/nginx-module-vts-master
nginx关键配置如下:
Vts模块页面查看方式:Http://ip:16599/status
1.2、配置nginx vts exporter and start
Systemctl enable nginx-vts-exporterSystemctl start nginx-vts-exporter
查看状态:
1.3、配置promethues.yaml后启动 promethues和grafana
scrape_configs: - job_name: 'prometheus' static_configs: - targets: [ 'ip1:9913','ip2:9913']
1.4、grafana 配置
随便用一个都行:
https://grafana.com/grafana/dashboards?search=vts%20
最终效果如下:
二、redis cluster监控部署:
2.1、redis cluster 容器、虚拟机、物理机部署(略)
2.2 、启动redis operator
nohop ./redis_exporter &
2.3、promethues配置(实际生产建议采用自动发现机制,可参考:https://www.cnblogs.com/skyflask/p/11498834.html)
- job_name: 'redis_exporter_targets' static_configs: - targets: - redis://192.1.127.161:6379 #redis每个nodes的ip和端口 - redis://192.1.127.140:6379 - redis://192.1.127.131:6379 - redis://192.1.127.146:6379 - redis://192.1.127.162:6379 - redis://192.1.127.151:6379 metrics_path: /scrape relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.1.2.17:9121 #redis operator的地址和端口 ## config for scraping the exporter itself - job_name: 'redis_exporter' static_configs: - targets: - 192.1.2.17:9121 #redis operator的地址和端口
查看状态(包含nginx和redis cluster的)
聚合查询redis集群内存总用量
redis集群中每个节点上客户端数量
当然也可以在grafana上查找自己喜欢的模板,例如下:
不过我并没有找到很适合redis cluster的模板,基本都是redis单节点,目前只在单节点上加了一个总流量的监控(最左下角那个)。求推荐
二、告警配置:
2.1、配置prometheus告警规则
prometheus.yml 增加如下配置
# Alertmanager configurationalerting: alertmanagers: - static_configs: - targets: #- alertmanager:9093 - 127.0.0.1:9093 #告警发送给本地9093的alertmanager# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files: - "rules.yml" #告警规则
rules.yml
groups:- name: Redis rules: - alert: RedisDown expr: redis_up == 0 for: 5m labels: severity: error annotations: summary: "Redis down (instance {{ $labels.instance }})" description: "Redis 挂了啊,mmp\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" - alert: MissingBackup expr: time() - redis_rdb_last_save_timestamp_seconds > 60 * 60 * 24 for: 10s labels: severity: error annotations: summary: "Missing backup (instance {{ $labels.instance }})" description: "Redis has not been backuped for 24 hours\n VALUE = {{ $value }}\n LABELS: {{ $labels }}" # 其他的差不多不贴了
2.2、安装配置alertmanager.yml 启动服务
global: #resolve_timeout: 5m resolve_timeout: 1m smtp_smarthost: '*****:25' #smtp IP 端口 smtp_from: 'xiongjian@***.com' smtp_auth_username: 'xiongjian@h***.com' smtp_auth_password: '*****' smtp_require_tls: false #templates: # - '*.tmpl'route: #路由规则 可以将不同告警 receiver: 'default-receiver' #默认的告警接收人 group_wait: 10s #报警等待时间,时间内的消息会被聚合发送 group_interval: 30s #组报警间隔时间 repeat_interval: 1000s #重复报警间隔时间 group_by: ['alertname'] #告警分组聚合标签,会根据标签做聚合receivers:- name: 'default-receiver' email_configs: - to: 'xiongjian@****.com' send_resolved: true #解决后发送确认邮件
2.3、查看告警
普罗米修斯页面(由于redis没有开启RDB所有会有相关告警):
alertmanager页面:
实际收到的告警邮件:
后续就剩下工作量的问题了:
1、增加高可用、对接测试环境所有中间件及现有监控告警指标
2、集成现有paas平台
3、中间件自动发现
4、增加短信和钉钉告警