整套解决方案:Prometheus+Grafana+Alertmanager实现告警推送教程

优采云 发布时间: 2022-10-06 14:12

  整套解决方案:Prometheus+Grafana+Alertmanager实现告警推送教程

  前言

  本文主要介绍Prometheus采集数据,通过Grafana加PromQL语句实现数据可视化,通过Alertmanage实现告警推送功能。温馨提醒,本文文章特产,2w多文字加几十张图片,建议采集观看。

  介绍普罗米修斯

  Prometheus 是一个开源系统监控和警报框架。受 Google 的 borgmon 监控系统启发,由在 SoundCloud 工作的前 google 员工于 2012 年创建,作为社区开源项目开发,并于 2015 年正式发布。 2016 年,Prometheus 正式加入云原生计算基金会,成为最Kubernetes 之后的热门项目。

  作为新一代监控框架,Prometheus 具有以下特点:

  示例图:

  Prometheus的适用场景

  在选择 Prometheus 作为监控工具之前,需要明确其适用范围以及不适用的场景。

  Prometheus 非常擅长记录纯数字时间序列。它适用于以服务器为中心的监控和高度动态的面向服务架构的监控。

  在微服务的监控中,Prometheus 对多维数据采集 和查询的支持也是一个特殊的优势。

  Prometheus 更加强调可靠性,即使在发生故障时也能查看系统统计数据。权衡利弊以确保整个系统的可用性,但可能会丢失少量数据。因此,它不适用于需要 100% 数据准确度的系统,例如实时计费系统(涉及金钱)。

  Prometheus 核心组件介绍

  普罗米修斯服务器:

  Prometheus Server 是 Prometheus 组件的核心部分,负责获取、存储和查询监控数据。Prometheus Server可以通过静态配置管理监控目标,也可以通过Service Discovery动态管理监控目标,并从这些监控目标中获取数据。其次,Prometheus Server 需要存储 采集 收到的监控数据。Prometheus Server 本身是一个时序数据库,采集 接收到的监控数据以时序的方式存储在本地磁盘中。最后,Prometheus Server 提供了一种自定义的 PromQL 语言来查询和分析数据。Prometheus Server 内置的 Express Browser UI,您可以通过它直接通过 PromQL 查询和可视化数据。

  出口商:

  Exporter通过HTTP服务Prometheus将监控数据采集的端点暴露给Prometheus Server

  服务器可以通过访问Exporter提供的Endpoint端点来获取需要采集的监控数据。一般来说,出口商可以分为两类:

  Direct 采集:这类Exporter直接内置了对Prometheus监控的支持,如cAdvisor、Kubernetes、Etcd、Gokit等,都是直接内置的endpoint,用于将监控数据暴露给Prometheus。

  间接采集:间接采集,原来监控目标不直接支持Prometheus,所以我们需要通过Prometheus提供的Client Library为监控目标编写监控采集程序。例如:Mysql Exporter、JMX Exporter、Consul Exporter等。

  推送网关:

  Prometheus Server 支持基于 PromQL 创建报警规则。如果满足 PromQL 定义的规则,就会产生告警,告警的后续处理流程由 AlertManager 管理。在AlertManager中,我们可以与内置的通知方式如email、Slack等进行集成,也可以通过Webhook自定义告警处理方式。

  服务发现:

  服务发现是 Prometheus 中一个特别重要的部分。对于基于Pull模型的抓取方式,需要在Prometheus中配置大量抓取节点信息,才能进行数据采集。有了服务发现,用户通过服务发现和注册工具为数百个节点注册服务,最后在Prometheus的配置文件中配置注册中心的地址,大大简化了配置文件的复杂度。

  它还可以更好地管理各种服务。在众多云平台(AWS、OpenStack)中,Prometheus 可以

  通过平台自带的API,直接自动发现平台上运行的各种服务,并获取它们的信息。Kubernetes 掌握和管理所有容器和服务信息。这时候,Prometheus 只需要和 Kubernetes 打交道,就能找到所有需要监控的需求。的容器和服务对象。

  普罗米修斯用户界面

  Prometheus UI 是 Prometheus 内置的可视化管理界面。通过 Prometheus UI,用户可以轻松了解 Prometheus 当前的配置,监控任务的运行状态。通过Graph面板,用户还可以直接使用PromQL实时查询监控数据。访问ServerIP:9090/graph打开WEB页面,可以通过PromQL查询数据,可以进行基础数据展示。

  如下图,查询主机负载的变化,可以使用关键字node_load1查询Prometheus采集接收到的主机负载的样本数据。这些样本数据按时间顺序显示,形成主机负载随时间变化的趋势。图表:

  关于格拉法纳

  Grafana 是一个跨平台的开源度量分析和可视化工具,可以通过查询采集的数据来展示,然后可视化。Grafana 为 prometheus 提供友好的支持,各种工具帮助你构建更酷的数据可视化。

  格拉法纳功能

  这里我们使用上面的Prometheus使用关键字node_load1来使用Grafana进行可视化,点击侧边栏中的加号图标,然后点击Dashboard点击Create,然后将Prometheus刚刚使用的查询语句放到Metries中,点击右上角的apply角落。.

  示例图:

  格拉法纳用户界面

  在上面的示例中,我们使用 Prometheus+grafana 通过 PromQL 监控和可视化简单的服务器负载。我们也可以通过第三方提供可视化的JSON文件,帮助我们快速监控服务器、Elasticsearch、MYSQL等。这里我们从grafana提供的第三方dashboard地址下载对应的json文件,然后导入grafana进行监控服务器。

  监控服务器示例图:

  除了服务器端监控之外,还可以监控应用服务。Prometheus 监控应用的方式很简单,只要进程暴露一个 HTTP 访问地址,就可以获取当前的监控样本数据。这样的程序称为 Exporter,Exporter 的实例称为 Target。Prometheus 通过循环训练定期从这些 Targets 中获取监控数据样本。对于应用来说,只需要暴露一个收录监控数据的HTTP访问地址即可。当然,提供的数据需要满足一定的格式。这种格式是 Metrics 格式:metric name>{=, …} 。label name 是标签,label value 是标签的值。

  Grafana监控springboot应用实现效果图:

  Prometheus+Grafana+Alertmanager等安装配置

  Prometheus 及相关组件使用 2.x 版本,Grafana 使用 7.x 版本。

  下载地址推荐使用清华大学或华为的开源镜像站点。

  下载链接:

  Prometheus及相关组件百度网盘地址:

  关联:

  提取码:4nlh

  Prometheus安装1、文件准备

  解压下载的 Prometheus 文件

  进入

  tar -zxvf prometheus-2.19.3.linux-amd64.tar.gz

  然后移动到 /opt/prometheus 文件夹,并在没有这个文件夹的情况下创建它

  2.配置修改

  在prometheus-2.19.3.linux-amd64文件夹目录下找到prometheus.yml配置文件,修改

  prometheus.yml 文件配置如下:

  # my global config

global:

scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

# scrape_timeout is set to the global default (10s).

# Alertmanager configuration

alerting:

alertmanagers:

- static_configs:

- targets:

- alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

# - "first_rules.yml"

# - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

# The job name is added as a label job= to any timeseries scraped from this config.

- job_name: 'prometheus'

# metrics_path defaults to '/metrics'

# scheme defaults to 'http'.

static_configs:

- targets: ['192.168.8.181:9090']

  3.普罗米修斯启动

  进入/opt/prometheus/prometheus-2.19.3.linux-amd64目录:

  nohup ./prometheus >/dev/null 2>&1 &

  启动成功后,在浏览器输入ip+9090查看相关信息。

  Grafana安装1、文件准备

  通过apm安装下载的grafana-7.1.1-1.x86_64.rpm文件

  进入:

   rpm -ivh grafana-7.1.1-1.x86_64.rpm

  安装

  如果出现以下错误:

  error: Failed dependencies:

urw-fonts is needed by grafana-6.1.4-1.x86_64

  没有安装依赖包,需要先安装依赖包,再安装grafana

  # yum install -y urw-fonts

  2. Grafana 启动

  在root用户下启动

  进入:

  sudo /bin/systemctl start grafana-server.service

  启动成功后,在浏览器输入ip+3000查看相关信息

  Alertmanager安装1、文件准备

  解压下载的 Alertmanager 文件

  进入

  tar -zxvf alertmanager-0.21.0.linux-386.tar.gz

  然后移动到 /opt/prometheus 文件夹,并在没有这个文件夹的情况下创建它

  2、alertmanager启动

  在root用户下启动

  进入:

  nohup ./alertmanager >/dev/null 2>&1 &

  启动成功后,在浏览器输入ip+9093查看相关信息

  示例图:

  Pushgateway安装1、文件准备

  解压下载的pushgateway文件

  进入

  tar -zxvf pushgateway-1.2.0.linux-amd64.tar.gz

  然后移动到 /opt/prometheus 文件夹,并在没有这个文件夹的情况下创建它

  2.开始

  在root用户下启动

  进入:

  nohup ./pushgateway >/dev/null 2>&1 &

  启动成功后在浏览器输入ip+9091查看相关信息

  五、Node_export安装1、文件准备

  解压下载的 Node_export 文件

  进入

  tar -zxvf node_exporter-0.17.0.linux-amd64.tar.gz

  然后移动到 /opt/prometheus 文件夹,并在没有这个文件夹的情况下创建它

  2.开始

  在root用户下启动

  进入:

  nohup ./consul_exporter >/dev/null 2>&1 &

  启动成功后在浏览器输入ip+9100查看相关信息

  Prometheus 使用教程

  Prometheus接口地址:ip+9090。

  这里我将使用图片和评论来解释。

  一、基本使用1>、Prometheus主界面说明

  2>、图表使用示例

  3>、查看运行信息

  4>、查看命令标签值

  

  5>、查看配置信息

  6、>查看集成组件

  集成的组件需要下载相应的导出服务并开始运行,并添加到prometheus的配置中!

  7>、查看服务发现

  8>、查看报警规则

  first_rules.yml 的配置。

  9>、检查是否触发了报警

  相关文件:

  格拉法纳使用

  Grafanf接口地址:ip+3000

  初始账号密码:admin、admin

  这里我还是用图片和注释来解释,想必这样会更容易理解。. .

  [英文]

  我这里还是用图片和笔记来解释,一定更容易理解。

  1>、主界面信息

  2>、创建仪表板监控实现

  1.添加数据源

  2.选择普罗米修斯

  3. 单击创建仪表板

  4. 点击创建

  5、输入node_load1表示语句,填写相关信息,点击apply完成,名称保存为Test

  6.点击搜索Test,点击查看

  3>、使用第三方dashboard来监控执行

  注意:需要提前添加数据源。

  1.点击左上角的加号,点击导入

  在线模式

  地址:

  离线模式

  监控示例:

  监控和警报实施

  监控告警的实现需要依赖Alertmanager及相关组件,如上例中监控服务器应用的node_server组件。

  电子邮件警报实施

  需要安装警报管理器。因为发邮件比较简单,我这里直接贴配置。xxx字符的参数需要根据情况改变。以下企业微信报警同理。

  Alertmanagers 服务的 alertmanager.yml 配置如下:

  global:

resolve_timeout: 5m

smtp_from: 'xxx@qq.com'

smtp_smarthost: 'smtp.qq.com:465'

smtp_auth_username: 'xxx@qq.com'

smtp_auth_password: 'xxx'

smtp_require_tls: false

smtp_hello: 'qq.com'

route:

group_by: ['alertname']

group_wait: 5s

group_interval: 5s

repeat_interval: 5m

receiver: 'email'

receivers:

- name: 'email'

email_configs:

- to: 'xxx@qq.com'

send_resolved: true

inhibit_rules:

- source_match:

severity: 'critical'

target_match:

severity: 'warning'

equal: ['alertname', 'dev', 'instance']

  注意:smtp_from、smtp_auth_username、to可以填写同一个邮箱,smtp_auth_password填写验证码,需要开启POS3。

  如果不知道如何开启POS3,可以查看我的文章文章:

  Prometheus服务的Prometheus.yml配置如下:

  # my global config

global:

scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

# scrape_timeout is set to the global default (10s).

# Alertmanager configuration

alerting:

alertmanagers:

- static_configs:

- targets:

- '192.168.214.129:9093'

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

- "/opt/prometheus/prometheus-2.19.3.linux-amd64/first_rules.yml"

# - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

# The job name is added as a label job= to any timeseries scraped from this config.

- job_name: 'prometheus'

# metrics_path defaults to '/metrics'

# scheme defaults to 'http'.

static_configs:

- targets: ['192.168.214.129:9090']

- job_name: 'server'

static_configs:

- targets: ['192.168.214.129:9100']

  注意:如果target有多个配置,可以在后面添加其他服务的节点。最好alertmanagers写下服务器的ip,否则可能无法发送报警数据。

  Error sending alert" err="Post \"http://alertmanager:9093/api/v1/alerts\": context deadline exceeded

  配置好Prometheus.yml之后,我们还需要配置告警的规则,也就是触发条件,满足条件就会触发。我们创建一个新的 first_rules.yml 来检测服务器何时挂起并发送消息

  first_rules.yml 报警配置:

  注意:与job相等的服务名称填写Prometheus.yml配置对应的名称。例如这里设置的服务器对应Prometheus.yml中配置的服务器。

  groups:

- name: node

rules:

- alert: server_status

expr: up{job="server"} == 0

for: 15s

annotations:

summary: "机器{{ $labels.instance }} 挂了"

description: "报告.请立即查看!"

  依次启动prometheus、altermanagers、node_server服务,查看告警,然后停止node_export服务,稍等片刻查看。

  企业微信报警实现

  操作与上例基本相同,主要区别在于配置。

  1.在企业微信中创建应用,获取secret、corp_id和agent_id配置。

  2.然后修改alertmanager.yml配置,alertmanager.yml配置如下:

  global:

resolve_timeout: 5s

wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'

wechat_api_secret: 'xxx'

wechat_api_corp_id: 'xxx'

templates:

- '/opt/prometheus/alertmanager-0.21.0.linux-386/template/wechat.tmpl'

route:

group_by: ['alertname']

group_wait: 10s

group_interval: 10s

repeat_interval: 10s

receiver: 'wechat'

receivers:

- name: 'wechat'

wechat_configs:

- send_resolved: true

to_party: '2'

agent_id: xxx

corp_id: 'xxx'

api_secret: 'xxx'

api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'

<p>

inhibit_rules:

- source_match:

severity: 'critical'

target_match:

severity: 'warning'

equal: ['alertname', 'dev', 'instance']

</p>

  配置成功后,操作和上面邮件发送的一样,在企业微信中可以看到如下信息。

  [英文]

  配置成功后,如果操作与上面发送的邮件一致,可以在微信中看到如下信息。

  如果上面的例子不友好,我们也可以开发一个报警模板。

  添加警报模板:

  在alertmanagers文件夹下创建一个模板文件夹,然后在该文件夹中创建一个微信提醒模板wechat.tmpl,并添加如下配置:

  {{ define "wechat.default.message" }}

{{ range .Alerts }}

========start=========

&#x544A;&#x8B66;&#x7A0B;&#x5E8F;: prometheus_alert

&#x544A;&#x8B66;&#x7EA7;&#x522B;: {{ .Labels.severity}}

&#x544A;&#x8B66;&#x7C7B;&#x578B;: {{ .Labels.alertname }}

&#x6545;&#x969C;&#x4E3B;&#x673A;: {{ .Labels.instance }}

&#x544A;&#x8B66;&#x4E3B;&#x9898;: {{ .Annotations.summary }}

&#x544A;&#x8B66;&#x8BE6;&#x60C5;: {{ .Annotations.description }}

=========end===========

{{ end }}

{{ end }}

  然后在alertmanager.yml中添加如下配置:

  templates:

- '/opt/prometheus/alertmanager-0.21.0.linux-386/template/wechat.tmpl'

  渲染:

  应用服务监控告警实现

  Prometheus 监控应用的方式很简单,只需要进程暴露一个 HTTP 即可获取当前的监控样本数据

  地址。这样的程序称为 Exporter,Exporter 的实例称为 Target。Prometheus 通过循环训练定期从这些 Targets 中获取监控数据样本。对于应用来说,只需要暴露一个收录监控数据的HTTP访问地址即可。当然,提供的数据需要满足一定的格式。这种格式是 Metrics 格式:metric name&gt;{=, …} 。label name 是标签,label value 是标签的值。

  Springboot应用实现步骤

  1.在pom文件中添加

  

io.micrometer

micrometer-registry-prometheus

org.springframework.boot

spring-boot-starter-actuator

  2.在代码中添加如下配置:

  private Counter requestErrorCount;

private final MeterRegistry registry;

@Autowired

public PrometheusCustomMonitor(MeterRegistry registry) {

this.registry = registry;

}

@PostConstruct

private void init() {

requestErrorCount = registry.counter("requests_error_total", "status", "error");

}

public Counter getRequestErrorCount() {

return requestErrorCount;

}

  3.在异常处理中添加如下记录:

  monitor.getRequestErrorCount().increment();

  4.在prometheus的配置中添加springboot应用服务监控

  - job_name: 'springboot'

metrics_path: '/actuator/prometheus'

scrape_interval: 5s

static_configs:

- targets: ['192.168.8.45:8080']

  5.Promethe.yml配置如下:

   - job_name: 'springboot'

metrics_path: '/actuator/prometheus'

scrape_interval: 5s

static_configs:

- targets: ['192.168.8.45:8080']

  规则文件配置如下:

  6.可以在prometheus监控中查看

  企业微信报警效果图:

  被监控的springboot项目地址:

  其他配置prometheus动态加载配置

  Prometheus数据源的配置主要分为静态配置和动态发现。常用的有以下几类:

  file_sd_configs 方法提供了一个简单的接口,可以实现在单独的配置文件中配置拉取对象,并监控这些文件的变化并自动加载变化。基于这种机制,我们可以开发自己的程序来监控监控对象的变化,并自动生成配置文件,实现监控对象的自动发现。

  在prometheus文件夹目录下创建targets.json文件

  配置如下:

  [

{

"targets": [ "192.168.214.129:9100"],

"labels": {

"instance": "node",

"job": "server-129"

}

},

{

"targets": [ "192.168.214.134:9100"],

"labels": {

"instance": "node",

"job": "server-134"

}

}

]

  然后在prometheus目录下添加如下配置:

   - job_name: 'file_sd'

file_sd_configs:

- files:

- targets.json

  一些警报配置

  这是我整理的一些服务应用告警的配置,欢迎大家讨论一些常用的相关配置。

  [英文]

  这是我整理的一些服务应用告警的配置,欢迎大家讨论一些常用的相关配置。

  内存警报设置

  - name: test-rule

rules:

- alert: "&#x5185;&#x5B58;&#x62A5;&#x8B66;"

expr: 100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes) > 30

for: 15s

labels:

severity: warning

annotations:

summary: "&#x670D;&#x52A1;&#x540D;:{{$labels.instance}}&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x7387;&#x8D85;&#x8FC7;30%&#x4E86;"

description: "&#x4E1A;&#x52A1;500&#x62A5;&#x8B66;: {{ $value }}"

value: "{{ $value }}"

  示例图:

  磁盘设置:

  总百分比设置:

  (node_filesystem_size_bytes {mountpoint ="/"} - node_filesystem_free_bytes {mountpoint ="/"}) / node_filesystem_size_bytes {mountpoint ="/"} * 100

  查看目录的磁盘使用百分比

  (node_filesystem_size_bytes{mountpoint="/boot"}-node_filesystem_free_bytes{mountpoint="/boot"})/node_filesystem_size_bytes{mountpoint="/boot"} * 100

  匹配多个挂载点的正则表达式

  (node_filesystem_size_bytes{mountpoint=”/|/run”}-node_filesystem_free_bytes{mountpoint=”/|/run”})

  /node_filesystem_size_bytes{mountpoint=~”/|/run”}*100

  磁盘填满预计需要多长时间

  predict_linear(node_filesystem_free_bytes {mountpoint = "/"}[1h],

  4 _3600) &lt; 0 predict_linear(node_filesystem_free_bytes

  {job=”node”}[1h], 4_3600) &lt; 0

  CPU使用率

  100 – (avg(irate(node_cpu_seconds_total{mode=”idle”}[5m])) 由

  (实例) * 100)

  空闲内存剩余率

  (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes)

  /node_memory_MemTotal_bytes * 100

  内存使用情况

  100 –

  (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes)

  /node_memory_MemTotal_bytes * 100

  磁盘使用情况

  100 – (node_filesystem_free_bytes{mountpoint=”/”,fstype=~”ext4|xfs”}/

  node_filesystem_size_bytes{mountpoint=”/”,fstype=~”ext4|xfs”} * 100)

  其他

  这次比较忙,ELK要等一段时间才能更新,虽然发布的博客对应的是去年整理的博客。. . .

  这篇文章文章准备了很久,写了这么多。但我觉得这还不错。对于读者来说,一次写一次可能并不比一次又一次地单独写更好。毕竟,没有必要一一寻找。

  [英文]

  这篇文章准备了很久,一边整理一边写,没想到会写这么多。不过,感觉也不错。对读者来说,一次写可能比单独写要好。毕竟,没有必要一一寻找。

  音乐推荐

  原创不容易,如果觉得不错,希望给个推荐!您的支持是我写作的最大动力!

  [英文]

  原创不易,如果觉得不错,希望给个推荐!您的支持是我写作的最大动力!

  最新版:新版PHP无陌然在线云加密平台系统源码 带安装说明(无陌然PHP云加密)

  源代码介绍

  新版PHP乌墨然在线云加密平台系统源码分享器展示最新版PHP在线云加密平台,

  PHP文件加密系统的源代码使用了这个加密系统。用户需要注册并登录才能使用此加密。

  用户登录后可以上传自己的php文件进行加密,加密成功后即可下载。但是每次php的加密文件只能下载一次,

  这也是为了安全保护。

  

  设备说明:

  1.先把这个程序上传到你的空间,

  2.设备数据库信息,

  3.修改根目录下lib文件夹下的config.php文件

  4.下一步是导入数据库。导入完成后,网站就可以访问了,

  5.后台路径/admin 默认登录名:admin 密码:admin

  

  如果要更正密码,请使用:password+dfghjklg 然后MD5加密,

  比如我要登录密码为123456,我会用md5加密123456dfghjklg,

  就拿到这么一串秘钥:1860afdf5e997838ef3ce89bc8409542 然后直接复制他,

  只需替换数据库用户表下第一条数据的密码中的内容即可。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线