前言

本文介绍了prometheus的相关内容

一、prometheus概述

Prometheus是一个开源系统监控和警报工具包,最初由 SoundCloud构建。
也是一款监控软件,也是一个时序数据库。Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。
主要用在容器监控方面,也可以用于常规的主机监控。
使用google公司开发的go语言编写。
Prometheus是一个框架,可以与其他组件完美结合。
在这里插入图片描述

二、搭建prometheus服务器

主机清单

主机名 ip
prometheus 192.168.88.5
web1 192.168.88.100

配置时间

同zabbix一样,需要配置时间为本地时间

timedatectl 
timedatectl set-timezone Asia/Shanghai
date
date -s "年月日 时:分:秒"

安装prometheus服务器

解压本地包:

cd prometheus_soft/
tar xf prometheus-2.37.5.linux-amd64.tar.gz 
mv prometheus-2.37.5.linux-amd64 /usr/local/prometheus

配置文件描述:
配置文件中包含三个配置块:global、rule_files和scrape_configs。
global块控制 Prometheus 服务器的全局配置。我们有两个选择。第一个,scrape_interval控制 Prometheus 抓取目标的频率。您可以为单个目标覆盖它。在这种情况下,全局设置是每 15 秒抓取一次。该evaluation_interval选项控制 Prometheus 评估规则的频率。Prometheus 使用规则来创建新的时间序列并生成警报。
rule_files块指定我们希望 Prometheus 服务器加载的任何规则的位置。现在我们还没有规则。
最后一个块,scrape_configs控制 Prometheus 监控的资源。由于 Prometheus 还将有关自身的数据公开为 HTTP 端点,因此它可以抓取和监控自身的健康状况。在默认配置中,有一个名为prometheus的作业,用于抓取Prometheus服务器公开的时间序列数据。该作业包含一个单一的、静态配置的目标,即localhost的9090端口。Prometheus期望度量在/metrics路径上的目标上可用,所以这个默认作业是通过 URL 抓取的:http://localhost:9090/metrics。
编写服务启动文件并启动服务

# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus Monitoring System
After=network.target
[Service]
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/usr/local/prometheus/data/
[Install]
WantedBy=multi-user.target

三、添加被监控端

监控方式:
拉取:pull。监控端联系被监控端,采集数据
推送:push。被监控端主动把数据发给监控端。在prometheus中,push的方式需要额外的组件pushgateway
被监控端根据自身运行的服务,可以运行不同的exporter(被监控端安装的、可以与Prometheus通信,实现数据传递的软件)
exporter列表:https://prometheus.io/docs/instrumenting/exporters/
部署通用的监控exporter:
node-exporter用于监控硬件和系统的常用指标
exporter运行于被监控端,以服务的形式存在。每个exporter所使用的端口号都不一样。
在web1[192.168.88.100]上部署node exporter

tar xf node_exporter-1.5.0.linux-amd64.tar.gz 
mv node_exporter-1.5.0.linux-amd64 /usr/local/node_exporter
# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
###
systemctl daemon-reload 
systemctl enable node_exporter.service --now
ss -tlnp | grep :9100

在Prometheus服务器上添加监控节点

# vim /usr/local/prometheus/prometheus.yml 
......
  - job_name: "web1"
    static_configs:
      - targets: ["192.168.88.100:9100"]
###
systemctl restart prometheus.service 

四、Grafana

Grafana是一款开源的、跨平台的、基于web的可视化工具
展示方式:客户端图表、面板插件
数据源可以来自于各种源,如prometheus

部署Grafana

装包起服务
初始化。访问http://192.168.88.5:3000。初始用户名和密码都是admin。第一次登陆时,要求改密码,本例中密码改为123456 如果登陆报错,请更换其他浏览器。

自动发现机制

自动发现是指Prometheus自动对节点进行监控,不需要手动一个一个去添加,和Zabbix的自动发现、自动注册一个道理
Prometheus有多种自动发现发现,比如file_sd_configs基于文件自动发现、基于K8S自动发现、基于openstack自动发现、基于consul自动发现等。
基于文件自动发现:
file_sd_configs实现文件级别的自动发现
使用文件自动发现功能后,Prometheus会定期检查配置文件是否有更新
如果有更新的话就将新加入的节点接入监控,服务端无需重启服务
修改promrtheus:
cp /usr/local/prometheus/prometheus.yml ~
修改配置文件,删除静态配置,添加自动发现配置
vim /usr/local/prometheus/prometheus.yml

将scrape_configs及以下内容修改为:

21 scrape_configs:
22 - job_name: “prometheus”
23 file_sd_configs:
24 - refresh_interval: 120s
25 files:
26 - /usr/local/prometheus/sd_config/*.yml
重启服务:
systemctl restart prometheus.service

五、Alertmanager

Prometheus服务器中的告警规则向Alertmanager发送告警。然后,Alertmanager管理这些告警,包括静默、抑制、分组以及通过电子邮件、即时消息系统和聊天平台等方法发出通知。
设置告警和通知的主要步骤是:
设置和配置Alertmanager
配置Prometheus与Alertmanager对接
在普罗米修斯中创建告警规则

在Prometheus中一条告警规则主要由以下几部分组成:
告警名称:用户需要为告警规则命名
告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

Alertmanager特性

Alertmanager处理客户端应用程序(如Prometheus服务器)发送的警报。它负责重复数据删除、分组,并将其路由到正确的接收方集成
分组:分组将性质相似的警报分类到单个通知中。这在较大的停机期间特别有用,此时许多系统同时发生故障,数百到数千个警报可能同时发出。
抑制:抑制是当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。
静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置, Alertmanager则不会发送告警通知。静默设置需要在Alertmanager的Web页面上进行设置。

部署Alertmanager

解压软件包部署
编写服务文件:
#vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager System
[Service]
ExecStart=/usr/local/alertmanager/alertmanager
–config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable alertmanager.service --now
访问http://192.168.88.5:9093可以访问web配置页面

配置文件:

Alertmanager的配置主要包含两个部分:路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。
在Alertmanager中可以定义一组接收器,比如可以按照角色(比如系统运维,数据库管理员)来划分多个接收器。接收器可以关联邮件,Slack以及其它方式接收告警信息。
目前配置文件中只设置了一个顶级路由route并且定义的接收器为default-receiver。因此,所有的告警都会发送给default-receiver。
因此在Alertmanager配置中一般会包含以下几个主要部分:
全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置
模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等
告警路由(route):根据标签匹配,确定当前告警应该如何处理
接收器(receivers):接收器是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook 等,接收器一般配合告警路由使用
抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生

Prometheus与Alertmanager对接:

编辑Prometheus配置文件,修改alerting配置
#vim /usr/local/prometheus/prometheus.yml
…略…
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 - localhost:9093
…略…

systemctl restart prometheus.service

配置Alertmanager通过邮件发送告警

cp /usr/local/alertmanager/alertmanager.yml ~
#vim /usr/local/alertmanager/alertmanager.yml
lobal:
smtp_from: ‘zzg@tedu.cn’ # 发件人地址
smtp_smarthost: ‘localhost:25’ # 邮件服务器地址
smtp_require_tls: false # 是否使用TLS安全连接
route:
group_by: [‘alertname’]
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: ‘default-receiver’ # 接收器
receivers:

  • name: ‘default-receiver’ # 配置接收器为邮件
    email_configs:
    • to: ‘root@localhost.localdomain’
      inhibit_rules:
  • source_match:
    severity: ‘critical’
    target_match:
    severity: ‘warning’
    equal: [‘alertname’, ‘dev’, ‘instance’]

mkdir /usr/local/prometheus/rules
#vim /usr/local/prometheus/rules/hoststats-alert.rules
groups:

  • name: example
    rules:
    • alert: InstanceDown
      expr: up == 0
      for: 5m
      labels:
      severity: warn
      annotations:
      summary: “Instance {{ $labels.instance }} down”
      description: “{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.”
  • alert: hostMemUsageAlert
    expr: (node_memory_MemTotal - node_memory_MemAvailable)/node_memory_MemTotal > 0.85
    for: 1m
    labels:
    severity: warn
    annotations:
    summary: “Instance {{ $labels.instance }} MEM usgae high”

在Prometheus中声明规则文件位置
#vim /usr/local/prometheus/prometheus.yml
…略…
15 rule_files:
16 - /usr/local/prometheus/rules/*.rules
…略…

systemctl restart alertmanager.service
systemctl restart prometheus.service
安装并启动邮件服务
yum install -y postfix mailx
systemctl enable postfix --now
将web1关机查看邮件
查看Alertmanager

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐