部署Prometheus+grafana详解

目录

[一、prometheus 介绍](#一、prometheus 介绍)

[二、prometheus 对比 zabbix](#二、prometheus 对比 zabbix)

[三、prometheus 监控插件](#三、prometheus 监控插件)

四、部署

1、下载所需的包

2.编辑prometheus的配置文件

[3、编辑alertmanager 的配置文件](#3、编辑alertmanager 的配置文件)

[4、tmpl 模板(将此文件创建在/opt/alertmanager/tmpl/)](#4、tmpl 模板(将此文件创建在/opt/alertmanager/tmpl/))

5.启动(注意所在目录)

6浏览器访问


一、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状态和查询性能。

四、部署

1、下载所需的包

包以上传,自行下载

解压后如图,redis、mysql 用于测试

2.编辑prometheus的配置文件

cpp 复制代码
vim prometheus-2.45.0.linux-amd64/prometheus.yml 

3、编辑alertmanager 的配置文件

cpp 复制代码
vim alertmanager-0.26.0.linux-amd64/alertmanager.yml 

将以前的全部删除

bash 复制代码
# 定义邮件通知模板的路径,可以是模板文件的目录,支持通配符 *.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: 'xxxxxx@163.com'   # 收件人的电子邮件地址
        from: 'xxxxxxxx@163.com' # 发件人的电子邮件地址
        smarthost: 'smtp.163.com:25'  # SMTP 服务器地址和端口
        auth_username: 'xxxxxxxx@163.com'  # SMTP 服务器的用户名
        auth_password: 'xxxxxxx'    # SMTP 服务器的密码
        html: '{{ template "email.html" . }}'  # 使用指定的邮件模板

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

4、tmpl 模板(将此文件创建在/opt/alertmanager/tmpl/)

cpp 复制代码
{{ 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 }}

5.启动(注意所在目录)

启动prometheus

cpp 复制代码
[root@localhost prometheus-2.45.0.linux-amd64]# ./prometheus

启动altermanager

cpp 复制代码
[root@localhost alertmanager-0.26.0.linux-amd64]# ./alertmanager 

启动node_exporter

cpp 复制代码
[root@localhost node_exporter-1.6.1.linux-amd64]# ./node_exporter 

6浏览器访问

prometheus IP:9090

altermanager IP:

grafana IP:3000

设置中文

与Prometheus关联

监控模板的导入

相关推荐
陈陈CHENCHEN3 小时前
【Kubernetes】在 K8s 上部署 Prometheus
kubernetes·prometheus
计算机毕设定制辅导-无忧学长2 天前
Grafana 与 InfluxDB 可视化深度集成(二)
信息可视化·数据分析·grafana
云游2 天前
大模型性能指标的监控系统(prometheus3.5.0)和可视化工具(grafana12.1.0)基础篇
grafana·prometheus·可视化·监控
qq_232045574 天前
非容器方式安装Prometheus和Grafana,以及nginx配置访问Grafana
nginx·grafana·prometheus
测试开发Kevin4 天前
详解grafana k6 中stage的核心概念与作用
测试工具·压力测试·grafana
夜莺云原生监控4 天前
Prometheus 监控 Kubernetes Cluster 最新极简教程
容器·kubernetes·prometheus
SRETalk4 天前
Prometheus 监控 Kubernetes Cluster 最新极简教程
kubernetes·prometheus
川石课堂软件测试5 天前
JMeter并发测试与多进程测试
功能测试·jmeter·docker·容器·kubernetes·单元测试·prometheus
SRETalk5 天前
夜莺监控的几种架构模式详解
prometheus·victoriametrics·nightingale·夜莺监控
天翼云开发者社区5 天前
Grafana无法启动修复解决
grafana