当前位置: 首页 > 科技观察

基于Prometheus和Grafana的监控平台之运维告警

时间:2023-03-23 11:12:33 科技观察

基于Prometheus和Grafana的监控平台运维告警转载请联系JAVA日知录公众号。通过上一篇我们搭建了监控环境,对服务器、数据库、应用进行了监控。运维人员可以实时了解被监控对象的当前运行状态,但无法发现服务器或应用异常。这就需要我们需要一个告警功能,当服务器或应用指标出现异常时发出告警,通过邮件或短信的方式告知运维人员及时处理。今天我们就来说说基于Prometheus和Grafana的监控平台的异常告警功能。告警方式Grafana新版Grafana已经提供了告警配置,可以直接在dashboard监控面板中设置。但是使用之后发现不灵活,不支持变量,很多下载的图表不能使用告警,所以我们没有选择使用Grafana告警,而是选择Alertmanager。与Grafana的图形化界面相比,Alertmanager需要依赖配置文件来实现。配置有点繁琐,但功能更强大,更灵活。接下来我们一步步实现告警通知。告警类型Alertmanager主要使用以下两种类型的告警:邮件接收者email_configWebhook接收者webhook_config会以post的形式发送如下格式的参数到配置的url地址。{"version":"2","status":"","alerts":[{"labels":,"annotations":,"startsAt":"","endsAt":""}]}"这一次,我们主要使用电子邮件进行提醒。"实现步骤下载从GitHub下载最新版本的Alertmanager,上传并解压到服务器。tar-zxvfalertmanager-0.19.0.linux-amd64.tar.gz配置Alertmanagerviaalertmanager.ymlglobal:resolve_timeout:5msmtp_smarthost:'mail.163.com:25'#邮箱发送端口smtp_from:'xxx@163.com'smtp_auth_username:'xxx@163.com'#邮箱账号smtp_auth_password:'xxxxxx'#邮箱密码smtp_require_tls:falseroute:group_by:['alertname']group_wait:10s#最初,第一次发送一组告警通知要等待多长时间group_interval:10s#发送新警报前的等待时间repeat_interval:1h#重复发送警报的周期对于email配置,此项不能设置得太低,否则会因为发送过多的邮件而被smtp服务器拒绝receiver:'email'receivers:-name:'email'email_configs:-to:'xxx@xxx.com'修改后可以使用./amtoolcheck-configalertmanager.yml查看文件是否正确。验证无误后,启动alertmanager。nohup./alertmanager&.(第一次启动可以不使用nohup静默启动,方便后面查看日志。)我们只定义一条路由,也就是说Prometheus产生的所有告警发送到Alertmanager后都会被一个名为email的接收者接收。其实对于不同级别的告警有不同的处理方式,所以在路由中,我们还可以定义更多的子路由。具体配置规则可以自行百度了解。配置Prometheus在Prometheus安装目录下创建一个rules文件夹,用来放置所有的告警规则文件。alerting:alertmanagers:-static_configs:-targets:['192.168.249.131:9093']rule_files:-rules/*.yml在rules文件夹下创建告警规则文件service_down.yml,服务器下线时发送邮件。groups:-name:ServiceStatusrules:-alert:ServiceStatusAlertexpr:up==0for:2mlabels:team:nodeannotations:summary:"Instance{{$labels.instance}}hasbeandown"description:"{{$labels.instance}}ofjob{{$labels.job}}hasbeendownformorethan2minutes."value:"{{$value}}""详细配置"alert:告警规则名称。expr:基于PromQL表达式告警触发条件,用于计算是否存在满足条件的时间序列。for:评估等待时间,可选参数。用于表示只有当触发条件持续一定时间后才发送告警。在等待期间,新产生的告警的状态为PENDING,等待时间过后为FIRING。labels:自定义标签,允许用户指定一组额外的标签附加到告警上。annotations:用于指定一组附加信息,比如用于描述告警详情的文本等,当告警产生时,annotations的内容会作为参数发送给Alertmanager。配置完成后重启Prometheus,访问Prometheus查看告警配置。测试关闭node_exporter,2分钟后可以收到告警邮件。截图如下:Alertmanager的告警内容支持模板配置,可以使用漂亮的模板进行渲染。有兴趣的可以试试!TheMorenodeexporterCPUUtilizationrate(unitispercent)(avgby(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m]))*100)memoryused(单位是bytes)的一些计算语句node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes-node_memory_Buffers_bytes-nodelab_memory_Smemoryused量(单位为bytes/sec)node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes-node_memory_Buffers_bytes-node_memory_Slab_bytes内存使用率(单位为percent)((node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes-node_memory_Buffers_bytes-node_memory_Slab_bytes)/node_memory_MemTotal_bytes)*100server1的内存使用率(单位为百分比)((node_memory_MemTotal_bytes{instance="server1"}-node_memory_MemAvailable_bytes{instance="server1"})/node_memory_MemTotal_bytes{instance="server1"})*100server2的磁盘使用率(百分比)((node_filesystem_size_bytes{fstype=~"xfs|ext4",instance="server2"}-node_filesystem_free_bytes{fstype=~"xfs|ext4",instance="server2"})/node_filesystem_size_bytes{fstype=~"xfs|ext4",instance="server2"})*100正常运行时间(以秒为单位)time()-node_boot_timeserver1正常运行时间(以秒为单位)time()-node_boot_time_seconds{instance="server1"}网络流出量(以字节/秒为单位)irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0server1的网络流出量(bytes/sec)irate(node_network_transmit_bytes_total{instance="server1",device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0网络流入(单位为字节/秒)irate(node_network_receive_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0server1的网络流入(单位为bytes/sec)irate(node_network_receive_bytes_total{instance="server1",device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0磁盘读取速度(单位为bytes/sec)irate(node_disk_read_bytes_total{device=~"sd.*"}[5m])