首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云TKE-搭建prometheus监控(二)

腾讯云TKE-搭建prometheus监控(二)

原创
作者头像
赵思晨
发布2020-10-28 00:51:28
2.5K0
发布2020-10-28 00:51:28
举报

文章《腾讯云TKE-搭建prometheus监控》基于prometheus,手把手教你如何在TKE上搭建全面的平台和业务监控,为业务保驾护航。这是系列文章的第二篇,第一篇见链接

本文主要介绍基于prometheus,手把手教你如何在TKE上搭建告警系统和图形监控界面。

一、搭建告警系统-alertmanager

Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器;告警方式可以按照不同的规则发送给不同的模块负责人,Alertmanager支持Email, Slack,等告警方式, 也可以通过webhook接入wechat等国内IM工具。

这里描述两种方法启动alertmanager:

1、采用二进制的方式安装在node上

下载alertmanager:https://prometheus.io/download/

配置文件alertmanager.yml

要指定要加载的配置文件,请使用该--config.file标志。

./alertmanager --config.file=alertmanager.yml

# 全局配置项
global:
  resolve_timeout: 5m #处理超时时间,默认为5min
  smtp_smarthost: 'smtp.qq.com:456' # 邮箱smtp服务器代理
  smtp_from: '******@qq.com' # 发送邮箱名称
  smtp_auth_username: '******@qq.com' # 邮箱名称
  smtp_auth_password: '******' #邮箱密码
 
# 定义路由树信息
route:
  group_by: ['alertname'] # 报警分组名称
  group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
  group_interval: 10s # 在发送新警报前的等待时间
  repeat_interval: 1m # 发送重复警报的周期
  receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
 
# 定义警报接收者信息
receivers:
  - name: 'email' # 警报
    email_configs: # 邮箱配置
    - to: '******@qq.com'  # 接收警报的email配置

这里要注意,qq邮箱的端口填456,腾讯云默认把25端口给禁了。

2、以pod形式运行。

首先新建一个configmap,用于存放配置文件alertmanager.yml

alertmanager-conf.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: alert-config  
  namespace: kube-ops
data:
  config.yml: |-
    global:
      # 在没有报警的情况下声明为已解决的时间
      resolve_timeout: 5m      # 配置邮件发送信息
      smtp_smarthost: 'smtp.163.com:25'
      smtp_from: 'ych_1024@163.com'
      smtp_auth_username: 'ych_1024@163.com'
      smtp_auth_password: '<邮箱密码>'
      smtp_hello: '163.com'
      smtp_require_tls: false
    # 所有报警信息进入后的根路由,用来设置报警的分发策略
    route:
      # 这里的标签列表是接收到报警信息后的重新分组标签,例如,接收到的报警信息里面有许多具有 cluster=A 和 alertname=LatncyHigh 这样的标签的报警信息将会批量被聚合到一个分组里面
      group_by: ['alertname', 'cluster']
      # 当一个新的报警分组被创建后,需要等待至少group_wait时间来初始化通知,这种方式可以确保您能有足够的时间为同一分组来获取多个警报,然后一起触发这个报警信息。
      group_wait: 30s      # 当第一个报警发送后,等待'group_interval'时间来发送新的一组报警信息。
      group_interval: 5m      # 如果一个报警信息已经发送成功了,等待'repeat_interval'时间来重新发送他们
      repeat_interval: 5m      # 默认的receiver:如果一个报警没有被一个route匹配,则发送给默认的接收器
      receiver: default      # 上面所有的属性都由所有子路由继承,并且可以在每个子路由上进行覆盖。
      routes:
      - receiver: email        
        group_wait: 10s        
        match:
          team: node    
    receivers:
    - name: 'default'
      email_configs:
      - to: '517554016@qq.com'
        send_resolved: true
    - name: 'email'
      email_configs:
      - to: '517554016@qq.com'
        send_resolved: true

然后是pod配置。可以把alert manager放在prometheus的pod中。新建一个容器即可。或者直接新建yigeworkload。对应yaml配置如下:

 - name: alertmanager    
    image: prom/alertmanager:v0.15.3    
    imagePullPolicy: IfNotPresent    
    args:
    - "--config.file=/etc/alertmanager/config.yml"
    ports:
    - containerPort: 9093
      name: http    
    volumeMounts:
    - mountPath: "/etc/alertmanager"
      name: alertcfg    
    resources:
      requests:
        cpu: 100m        
        memory: 256Mi      
      limits:
        cpu: 100m        
        memory: 256Mi
volumes:
- name: alertcfg  
  configMap:
    name: alert-config

或直接在web上新建workload:

二、设置prometheus报警规则

现在我们只是把 AlertManager 容器运行起来了,也和 Prometheus 进行了关联,但是现在我们并不知道要做什么报警,因为没有任何地方告诉我们要报警,所以我们还需要配置一些报警规则来告诉我们对哪些数据进行报警。

警报规则允许你基于 Prometheus 表达式语言的表达式来定义报警报条件,并在触发警报时发送通知给外部的接收者。

同样在 Prometheus 的配置文件中添加如下报警规则配置:

rule_files:
  - /etc/prometheus/rules.yml

其中 rule_files 就是用来指定报警规则的,这里我们同样将 rules.yml 文件用 ConfigMap 的形式挂载到 /etc/prometheus 目录下面即可:

apiVersion: v1kind: ConfigMapmetadata:
  name: prometheus-config  namespace: kube-opsdata:
  prometheus.yml: |
    ...
  rules.yml: |
    groups:
    - name: test-rule
      rules:
      - alert: NodeMemoryUsage
        expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 20
        for: 2m
        labels:
          team: node
        annotations:
          summary: "{{$labels.instance}}: High Memory usage detected"
          description: "{{$labels.instance}}: Memory usage is above 20% (current value is: {{ $value }}"
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: error
        annotations:
          summary: "Instance {{ $labels.instance }} down2"
          description: "{{ $labels.instance }} of job2 {{ $labels.job }} has been down for more than 5 minutes."

其中的字段解释如下:

for 语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。

labels 语句允许指定额外的标签列表,把它们附加在告警上。

annotations 语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于报警信息的展示之类的。

在prometheus的alerts界面,可以看到我们配置的告警规则:

我们可以看到页面中出现了我们刚刚定义的报警规则信息,而且报警信息中还有状态显示。一个报警信息在生命周期内有下面3种状态:

  • inactive: 表示当前报警信息既不是firing状态也不是pending状态
  • pending: 表示在设置的阈值时间范围内被激活了
  • firing: 表示超过设置的阈值时间被激活了

然后这个node告警会被默认路由捕捉到。默认路由设置的是email发送,因此你的邮箱应会收到告警邮件,如下:

三、搭建grafana监控界面

1、grafana docker镜像下载

docker pull grafana/grafana

2、然后根据镜像,建立好pod后,可根据pod ip+3000端口访问,访问如下:

出现这个界面,说明你的grafana运行成功了。但这只是一个空的展示界面,还需要配置数据源,这里的数据源就是prometheus。

3、添加prometheus作为数据源,如下图所示:

然后输入prometheus的ip和端口。在tke上,一般用service的内网ip,也就是服务ip。

4、添加dashboard和panel监控面板

其中panel可以配置具体的prom ql查询语句,来展示数据。如下所示:

其中在metrics这一栏,输入查询语句即可。

除了自己写metrics,一个个打造自己的监控面板。grafana官方还提供了各种模版的监控。在import功能中,可以添加官方的模版。

比如选择id是8919的prometheus node监控

展示效果如下:

这里没有数据的原因是这个面板采用node exporter的metrics。而我们用的是telegraf的metrics。

总结:

本文详细介绍了,如何在TKE上,搭建基于prometheus的告警系统和图形监控界面。下篇文章,将介绍如何在TKE上如何使用telegraf以及thanos。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、搭建告警系统-alertmanager
    • 1、采用二进制的方式安装在node上
      • 2、以pod形式运行。
      • 二、设置prometheus报警规则
      • 三、搭建grafana监控界面
        • 1、grafana docker镜像下载
          • 2、然后根据镜像,建立好pod后,可根据pod ip+3000端口访问,访问如下:
            • 3、添加prometheus作为数据源,如下图所示:
              • 4、添加dashboard和panel监控面板
              • 总结:
              相关产品与服务
              Grafana 服务
              Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档