prometheus 监控

prometheus 介绍

Prometheus 是一个开源的系统监控和警报工具,广泛用于监视和度量应用程序、服务和基础设施的性能和可用性。它最初由SoundCloud开发并开源,现在是一个独立的开源项目,由Cloud Native Computing Foundation(CNCF)托管。以下是关于 Prometheus 的一些主要特点和功能:

  1. 多维数据模型:Prometheus 使用多维数据模型来存储和查询监控数据。每个数据样本都包括时间戳和一组标签(labels),这允许用户对数据进行高度维度化的查询和分析。
  2. PromQL 查询语言:Prometheus 提供了强大的查询语言,称为 PromQL,用于执行各种复杂的数据查询、聚合和变换操作。PromQL 支持范围查询、集合运算、数学运算和聚合等功能。
  3. 灵活的数据收集:Prometheus 支持多种数据收集方式,包括主动拉取(pull)和被动推送(push)模式。它可以通过各种数据源(如HTTP、Exposition格式的端点、JMX、Node Exporter等)获取监控数据。
  4. 动态发现和自动注册:Prometheus 支持服务发现,可以自动发现和注册新的监控目标,特别适合在容器化环境中动态添加和移除应用程序和服务。
  5. 警报和通知:Prometheus 具有内置的警报管理系统,允许用户定义和配置警报规则。当警报触发时,它可以通过各种渠道发送通知,如电子邮件、Slack、PagerDuty等。
  6. 可扩展性:Prometheus 可以通过联邦(Federation)和远程写入功能轻松扩展,以支持多个 Prometheus 实例的集成和数据汇总。
  7. 内置 Web UI:Prometheus 提供一个内置的Web界面,允许用户查询和可视化监控数据,查看警报规则以及检查目标的状态。
  8. 生态系统和插件:Prometheus 生态系统非常丰富,包括各种导出器、Grafana仪表板、Alertmanager、Pushgateway 等工具,可以扩展和增强 Prometheus 的功能。
  9. 云原生支持:Prometheus 适合在云原生环境中运行,特别是在Kubernetes集群中。它能够轻松地与云原生工具和平台集成。

Prometheus 被广泛用于监控微服务架构、容器化应用、云基础设施和传统的物理服务器。它是一个功能强大、灵活且可扩展的监控工具,广受社区欢迎,用于监视生产环境中的各种应用程序和服务。

prometheus 对比 zabbix

Prometheus 的优势:

  1. 云原生和容器友好:Prometheus 被设计为云原生和容器化环境的监控解决方案。它支持动态发现和监控Kubernetes和Docker等容器化环境中的应用程序和服务。
  2. 强大的多维数据模型:Prometheus 使用标签(labels)来对监控数据进行多维度的分类和查询,这使得数据分析和告警配置更加灵活和强大。
  3. 强大的查询语言:Prometheus Query Language(PromQL)非常适合对时间序列数据进行查询和分析,可以执行复杂的数据分析操作。
  4. 开源和活跃的社区:Prometheus 是一个开源项目,拥有庞大的社区支持和活跃的开发。这意味着有大量的插件、导出器和仪表板可供使用。
  5. 性能和扩展性:Prometheus 的性能非常出色,能够高效地处理大量的时间序列数据。它还支持联邦(Federation)和远程写入等功能,以支持多个 Prometheus 实例的集成和扩展。

Prometheus 的劣势:

  1. 长期存储:Prometheus 的默认存储系统不适合长期存储,因此通常需要与其他长期存储方案集成,如 Thanos 或 Cortex。
  2. 复杂性:Prometheus 配置可能需要更多的手动设置,尤其是在大型环境中,这可能会导致一些复杂性。

Zabbix 的优势:

  1. 综合性:Zabbix 提供了全面的监控功能,包括主机性能监控、网络监控、应用程序监控、日志监控等。它是一个综合性的监控解决方案。
  2. 可视化和仪表板:Zabbix 提供了丰富的仪表板和可视化工具,帮助用户更容易地分析监控数据。
  3. 通知和告警:Zabbix 具有强大的通知和告警功能,可以通过多种渠道(如电子邮件、SMS、Slack等)通知管理员和运维人员。
  4. 长期存储:Zabbix 具有内置的数据库用于长期存储监控数据,因此可以长期保留历史数据。

Zabbix 的劣势:

  1. 配置复杂性:Zabbix 的配置可能较为复杂,特别是在大型环境中,需要耗费较多的时间和精力来进行配置和维护。
  2. 不太适合云原生环境:Zabbix 通常需要较多的手动配置来适应云原生和容器化环境,与容器编排平台(如Kubernetes)的集成可能需要额外的工作。

总的来说,Prometheus 更适合云原生、容器化环境,具有强大的多维数据模型和灵活的查询语言。Zabbix 则更适合那些需要全面监控功能、可视化和长期存储的传统监控需求。选择哪个系统通常会取决于您的具体需求、环境和技术栈。您也可以考虑将它们结合使用,以满足不同方面的监控需求。

prometheus 监控插件

还包括一些其他的插件未列出

官网插件列表

  1. Node Exporter:
    • Node Exporter 用于监控主机级别的系统性能和资源利用情况,包括 CPU、内存、磁盘、网络、负载等。
  2. Blackbox Exporter:
    • Blackbox Exporter 用于执行网络探测,监控网络服务的可用性和性能。它可以执行HTTP、TCP、ICMP等类型的探测。
  3. JMX Exporter:
    • JMX Exporter 用于监控Java应用程序,通过JMX接口暴露Java应用程序内部的性能数据。
  4. cAdvisor (Container Advisor):
    • cAdvisor 用于监控容器的性能和资源利用情况,包括Docker容器和Kubernetes容器。
  5. PostgreSQL Exporter:
    • PostgreSQL Exporter 用于监控PostgreSQL数据库的性能和查询统计信息。
  6. MySQL Exporter:
    • MySQL Exporter 用于监控MySQL数据库的性能和查询统计信息。
  7. Redis Exporter:
    • Redis Exporter 用于监控Redis数据库的性能和统计信息。
  8. Nginx Exporter:
    • Nginx Exporter 用于监控Nginx Web服务器的性能和请求统计信息。
  9. Apache Exporter:
    • Apache Exporter 用于监控Apache HTTP服务器的性能和请求统计信息。
  10. Prometheus MySQL Exporter:
  • 这个Exporter用于监控Prometheus自身的性能和状态,包括Prometheus的TSDB状态和查询性能。

prometheus 服务配置解析

主配置文件

# 这是 Prometheus 配置文件示例

# 全局配置部分
global:
  # 设置数据抓取的时间间隔为每15秒。默认为每1分钟。
  scrape_interval: 15s

  # 设置规则评估的时间间隔为每15秒。默认为每1分钟。
  evaluation_interval: 15s

# 警报配置部分
alerting:
  # 配置警报管理器的地址。警报管理器用于接收和处理警报信息。
  alertmanagers:
    - static_configs:
        - targets:
          # 这里应该配置警报管理器的地址和端口。当前示例中被注释掉,因此没有激活警报通知。

# 规则文件部分
rule_files:
  # 在这里可以列出要加载的规则文件。每个规则文件定义了监控规则和警报规则。
  # 例如: 
  # - "first_rules.yml"
  # - "second_rules.yml"

# 数据抓取配置部分
scrape_configs:
  - job_name: "prometheus"
    # 这是一个抓取任务的名称,将作为标签添加到抓取的时间序列数据中。
    static_configs:
      - targets: ["192.168.75.149:9090"]
      # 指定要抓取的目标的地址。在这个示例中,Prometheus自身是监控目标。
  # 如果还需要添加其他配置,可以在下方编写
  - job_name: "node_exporter"
  	static_configs:
  	  - targets: ["192.168.75.149:9100"]

scrape_configs 配置块

# 定义一个抓取任务的名称,可以根据需要命名
- job_name: "example_job"

# 使用静态配置,指定抓取目标的地址
static_configs:
  - targets: ["example-target:8080"]
  # 在这里,您需要指定要监控的目标的地址和端口,例如 "example-target" 主机的端口 8080

# 指定要抓取的 metrics 路径,通常是监控数据的 HTTP 路径
metrics_path: "/custom_metrics"
# 这里定义了要从目标服务中获取监控数据的路径。默认情况下,Prometheus 使用 /metrics。

# 添加参数,可用于过滤或改变抓取的数据
params:
  param1: ["value1", "value2"]
  # 这些参数用于向抓取请求添加额外的参数。参数可以用于过滤或限定要获取的监控数据。

# 重新定义标签,将 __address__ 标签的值替换为 "example_instance"
relabel_configs:
  - source_labels: [__address__]
    target_label: instance
    replacement: "example_instance"
  # 在这里,对抓取的时间序列数据进行标签重命名或过滤。这个示例将 "__address__" 标签的值替换为 "example_instance"。

# 指定抓取时间间隔为每30秒
scrape_interval: 30s
# 这里设置了从目标服务获取数据的频率。每30秒,Prometheus将尝试从目标获取数据。

# 指定抓取任务的超时时间为10秒
scrape_timeout: 10s
# 这定义了每次抓取请求的最大持续时间。如果在10秒内无法获取数据,抓取任务将超时。

static_configs 配置块

static_configs:
  - targets: ["example-target:8080"]
    # 这是要监控的目标的地址和端口。在这个示例中,"example-target" 主机的端口 8080。
    
    # 可选配置选项:
    
    # labels:为抓取的时间序列数据添加自定义标签。这些标签可以用于数据的维度划分。
    # 例如:
    # labels:
    #   environment: "production"
    #   service: "web"
    
    # metric_relabel_configs:允许您在抓取时修改或重命名指标名称。
    # 例如:
    # metric_relabel_configs:
    #   - source_labels: [__name__]
    #     target_label: new_metric_name
    #     replacement: "renamed_metric"
    
    # relabel_configs:除了 metric_relabel_configs,您还可以使用 relabel_configs 来对抓取的数据的标签进行重命名、过滤或修改。
    # 例如:
    # relabel_configs:
    #   - source_labels: [instance]
    #     target_label: my_instance
    #     replacement: "renamed_instance"
    
    # params:可用于过滤或改变抓取的数据的参数。
    # 例如:
    # params:
    #   param1: ["value1", "value2"]

告警规则配置

groups:
  - name: 'disk-usage-alerts'
    # 这是告警组的名称
    rules:
      - alert: DiskSpaceUsageHigh
        # 这是告警规则的名称
        expr: 100 - (node_filesystem_avail_bytes / node_filesystem_size_bytes * 100) > 50
        # 告警表达式检查磁盘使用率是否超过50%
        for: 5m
        # 如果条件持续5分钟,则触发告警
        labels:
          severity: 'warning'
          # 为告警添加标签,指定严重性为“警告”
        annotations:
          summary: '磁盘使用率过高 {{ $labels.instance }}'
          # 摘要注释,描述告警的内容,包括实例名称

规则配置符号

数学操作符:

+:加法
-:减法
*:乘法
/:除法
%:取余
比较操作符:

==:等于
!=:不等于
>:大于
<:小于
>=:大于等于
<=:小于等于
逻辑操作符:

and:逻辑与
or:逻辑或
unless:逻辑非
括号:

( 和 ):用于分组表达式,改变运算的优先级。
内置函数:

PromQL还支持许多内置函数,如 sum()、avg()、min()、max() 等,以进行聚合和处理时间序列数据。
矢量选择器:

PromQL允许您选择时间序列数据,例如 up{job="api"} 选择了job标签为"api"的时间序列数据。
向量操作符:

PromQL提供一些用于处理时间序列向量的操作符,例如 offset, on, ignoring, group_left, group_right 等。
时间操作符:

offset:用于偏移时间序列数据。
time():用于获取当前时间戳。
timestamp():用于获取时间戳。

配置alertmanager

alertmanager.yml

# 定义邮件通知模板的路径,可以是模板文件的目录,支持通配符 *.tmpl
global:
  resolve_timeout: 5m
  smtp_from: 'xxxxx' # 发件⼈
  smtp_smarthost: 'smtp.163.com:465' # 邮箱服务器的POP3/SMTP 主机配置 smtp.qq.com 
  smtp_auth_username: 'xxxxxxxxx' # ⽤⼾名 
  smtp_auth_password: 'xxxxxxxxxx' # 授权码
  smtp_require_tls: false

templates:
  - /opt/alertmanager/tmpl/*.tmpl

# 设置路由规则,指定如何分组和发送警报
route:
  group_by: ['alertname']      # 根据警报名称进行分组,确保同一类型的警报被归为一组
  group_wait: 30s             # 当一个警报组内的警报发生后,等待 30 秒,以便将它们一起发送
  group_interval: 5m          # 每 5 分钟发送一次警报组
  repeat_interval: 1h         # 如果警报仍然处于活动状态,每小时重复发送一次
  receiver: 'email-notifications'  # 默认使用 'email-notifications' 接收者来发送警报通知

# 定义接收者配置,包括电子邮件通知设置
receivers:
  - name: 'email-notifications'  # 接收者名称,用于路由规则中的指定
    email_configs:
      - to: 'newrain_wang@163.com'   # 收件人的电子邮件地址
        from: 'newrain_wang@163.com' # 发件人的电子邮件地址
        smarthost: 'smtp.163.com:25'  # SMTP 服务器地址和端口
        auth_username: 'newrain_wang@163.com'  # SMTP 服务器的用户名
        auth_password: 'UWYNCPQOBQFCDLIW'    # SMTP 服务器的密码
        html: '{{ template "email.html" . }}'  # 使用指定的邮件模板

# 定义抑制规则,用于控制警报的触发和抑制
inhibit_rules:
 - source_match:
     severity: 'critical'  # 匹配来自严重性为 'critical' 的警报
   target_match:
     severity: 'warning'  # 匹配目标严重性为 'warning' 的警报
   equal: ['alertname', 'dev', 'instance']  # 仅当警报名称、标签 'dev' 和 'instance' 均匹配时抑制

tmpl 模板

{{ define "email.html" }}
<!DOCTYPE html>
<html>
<head>
    <style>
        table {
            border-collapse: collapse;
            width: 80%;
            margin: 20px auto;
        }

        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }

        th {
            background-color: #f2f2f2;
        }

        h1 {
            text-align: center;
        }

        .alert-details {
            margin-top: 20px;
        }

        .alert-item {
            border: 1px solid #ddd;
            padding: 10px;
            margin-bottom: 10px;
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
    <h1>监控报警通知</h1>
    <table>
        <tr>
            <th>告警状态</th>
            <th>告警级别</th>
            <th>告警类型</th>
            <th>告警应用</th>
            <th>告警主机</th>
            <th>告警详情</th>
            <th>触发阀值</th>
            <th>告警时间</th>
        </tr>
        {{ range $i, $alert := .Alerts }}
        <tr>
            <td>{{ .Status }}</td>
            <td>{{ $alert.Labels.severity }}</td>
            <td>{{ $alert.Labels.alertname }}</td>
            <td>{{ $alert.Annotations.summary }}</td>
            <td>{{ $alert.Labels.instance }}</td>
            <td>{{ $alert.Annotations.description }}</td>
            <td>{{ $alert.Annotations.value }}</td>
            <td>{{ $alert.StartsAt.Format "2006-01-02 15:04:05" }}</td>
        </tr>
        {{ end }}
    </table>
</body>
</html>
{{ end }}

配置node_exporter

node_exporter 指标详解

配置mysql_exporter

mysql_exporter

PQL 详解

PromQL 讲解

Prometheus是一个广泛使用的开源监控系统,用于收集和存储系统指标数据。它具有灵活的查询语言和强大的图形化和报警功能,可用于监控各种类型的应用程序和基础设施。 要使用Prometheus监控系统,通常需要以下步骤: 1. 下载和安装Prometheus服务器:你可以从Prometheus官方网站下载适合你操作系统的二进制文件,并按照说明进行安装。 2. 配置Prometheus服务器:在安装完成后,你需要创建一个配置文件来定义你要监控的目标和其他设置。配置文件使用YAML格式,可以指定要监控的目标的地址、指标的抓取频率、告警规则等。 3. 启动Prometheus服务器:在配置文件完成后,你可以启动Prometheus服务器,并通过浏览器访问其Web界面,默认端口为9090。在Web界面中,你可以查看收集到的指标数据、执行查询、创建面板和设置告警规则等。 4. 配置目标应用程序:为了让Prometheus能够收集目标应用程序的指标数据,你需要在目标应用程序中集成Prometheus的客户端库,并在应用程序代码中暴露指标数据的接口。Prometheus客户端库支持多种编程语言,例如Go、Java、Python等。 5. 可选:使用Prometheus的可视化工具:Prometheus本身提供了一个基本的Web界面,但你也可以使用其他可视化工具来更好地展示和分析指标数据。一些流行的可视化工具包括Grafana和Kibana等。 总结来说,Prometheus提供了一种灵活、可扩展的方式来监控系统指标数据,可以帮助你有效地监控和管理你的应用程序和基础设施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值