部署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关联

监控模板的导入

相关推荐
Heartsuit2 天前
云原生之运维监控实践-使用Prometheus与Grafana实现对MinIO服务的监测
云原生·grafana·prometheus·minio·运维监控
Cat_Xu2 天前
【TEST】Apache JMeter + Influxdb + Grafana
jmeter·grafana
晴天飛 雪5 天前
Grafana监控PostgreSQL
数据库·postgresql·grafana
大虾别跑5 天前
docker安装zabbix +grafana
docker·zabbix·grafana
菜鸟挣扎史6 天前
grafana+prometheus+windows_exporter实现windows进程资源占用的监控
windows·grafana·prometheus·进程·process
tester Jeffky6 天前
JMeter监听器与压测监控之Grafana
jmeter·eureka·grafana
牙牙7057 天前
Prometheus结合K8s(二)使用
容器·kubernetes·prometheus
牙牙7058 天前
Prometheus结合K8s(一)搭建
容器·kubernetes·prometheus
福大大架构师每日一题8 天前
32.2 prometheus倒排索引统计功能
ios·iphone·prometheus
DB菜鸟10 天前
Grafana Username password invalid
java·服务器·grafana