服务可见性之指标监控0-1

Posted by jabin on November 28, 2021

服务可见性范畴

1. Log。 Ks+蓝鲸日志
2. Trace。 Istio+ks
3. Metrics。?

指标监控是什么

1. 基础监控。 运行服务的基础设施的监控
2. 运行时监控。GC次数和耗时、线程数量监控
3. 通用监控。流量、请求耗时
4. 错误监控。主要是错误码的一些监控
5. 业务指标监控。

promethus套件

图片描述

核心组件

1. Prometheus Server
2. Exporters
3. PushGateway
4. AlertManager

告警处理流程

请求数据搜集

1. Pull metrics(一分钟请求一次)
2. 数据源主动Push到Pushgateway

告警状态

server 每隔一分钟评估一次告警规则(inactive/pending/firing) 图片描述

AlertManager

1. 全局配置
2. 路由。 过滤告警发给对应的receiver
3. 静默规则
4. Receivers。 定义告警的接收者,支持邮箱、webhook等
5. 告警内容的模板配置。看着不是很好用
global:
  resolve_timeout: 5m
  http_config: {}
  smtp_hello: localhost
  smtp_require_tls: true
  pagerduty_url: https://events.pagerduty.com/v2/enqueue
  opsgenie_api_url: https://api.opsgenie.com/
  wechat_api_url: https://qyapi.weixin.qq.com/cgi-bin/
  victorops_api_url: https://alert.victorops.com/integrations/generic/20131114/alert/
route:
  receiver: Default
  group_by:
  - namespace
  - alertname
  - rule_id
  routes:
  - receiver: Watchdog
    match:
      alertname: Watchdog
  - receiver: event
    match:
      alerttype: event
    group_interval: 30s
  - receiver: auditing
    match:
      alerttype: auditing
    group_interval: 30s
  - receiver: prometheus
    match_re:
      alerttype: .*
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
inhibit_rules:
- source_match:
    severity: critical
  target_match_re:
    severity: warning|info
  equal:
  - namespace
  - alertname
- source_match:
    severity: warning
  target_match_re:
    severity: info
  equal:
  - namespace
  - alertname
receivers:
- name: Default
- name: Watchdog
- name: prometheus
  webhook_configs:
  - send_resolved: true
    http_config: {}
    url: http://notification-manager-svc.kubesphere-monitoring-system.svc:19093/api/v2/alerts
    max_alerts: 0
- name: event
  webhook_configs:
  - send_resolved: false
    http_config: {}
    url: http://notification-manager-svc.kubesphere-monitoring-system.svc:19093/api/v2/alerts
    max_alerts: 0
- name: auditing
  webhook_configs:
  - send_resolved: false
    http_config: {}
    url: http://notification-manager-svc.kubesphere-monitoring-system.svc:19093/api/v2/alerts
    max_alerts: 0
templates: []

高可用

1. Prometheus: 远程存储+联邦集群
2. AlertManager: 多实例部署+Gossip协议

https://github.com/yunlzheng/prometheus-book/blob/master/ha/READMD.md

PromQL

1. <metric name>{<label name>=<label value>, ...}
2. Metric类型。Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要)
3. 常见的语法包括基于lable的过滤(正则)、时间范围查询([5m]/ offset [5m])、聚合操作(sum)、内置函数(increase)等

https://github.com/yunlzheng/prometheus-book/blob/master/promql/README.md

KubeSphere下的指标监控和告警

图片描述

指标数据源 exportor

服务暴露Metrics接口

配置服务监控导出器

图片描述

验证数据源生效

  • 查看k8s的ui页面地址
  • targets 图片描述

告警策略配置

页面配置

项目->监控告警->创建告警策略->告警规则→自定义规则 图片描述

CRD配置

集群->CRD->PrometheusRule->编辑对应项目的文件->在告警规则的labels增加namespace: [命名空间/项目名] 图片描述

告警推送配置

邮箱推送

// Config配置
cat <<EOF | kubectl apply -f -
apiVersion: notification.kubesphere.io/v2beta1
kind: Config
metadata:
  labels:
    app: notification-manager
    type: tenant
    namespace:  [命名空间/项目名]
  name:  [命名空间/项目名]-email-config
spec:
  email:
    authUsername: paas 
    from: [email protected]
    requireTLS: false
    smartHost:
      host: xxxxx
      port: 25
EOF

// Receiver配置
cat <<EOF | kubectl apply -f -
apiVersion: notification.kubesphere.io/v2beta1
kind: Receiver
metadata:
  labels:
    app: notification-manager
    type: tenant
    namespace: [命名空间/项目名]
  name: [命名空间/项目名]-email-receiver
spec:
  email:
    alertSelector:
      matchExpressions:
      - key: severity
        operator: In
        values:
        - error
        - critical
    emailConfigSelector:
      matchLabels:
        type: tenant
        namespace: [命名空间/项目名]
    to:
    - [email protected]
EOF

钉钉推送

// Config配置
cat <<EOF | kubectl apply -f -
apiVersion: notification.kubesphere.io/v2beta1
kind: Config
metadata:
  name: [命名空间/项目名]-webhook-config
  labels:
    app: notification-manager
    type: tenant
    namespace: [命名空间/项目名]
EOF

// Receiver 配置
cat <<EOF | k apply -f -
apiVersion: notification.kubesphere.io/v2beta1
kind: Receiver
metadata:
  name: [命名空间/项目名]-webhook-receiver
  labels:
    app: notification-manager
    type: tenant
    namespace: [命名空间/项目名]
spec:
  webhook:
    enabled: true
    url: http://xx.xxx.xx:31550/prometheus/router?ddurl=[钉钉群机器人url]      // webhook中转服务, 支持告警内容模板配置
    webhookConfigSelector:
        matchLabels:
          namespace: [命名空间/项目名]
          type: tenant
EOF

其它推送

微信、slack、webhook

grafana监控面板

基本概念

1. 数据源(Data Source)。 支持Prometheus、Es等数据源
2. 仪表盘(Dashboard)。 Panel, 每一个Panel可以设置查询的数据源以及数据查询方式; 一个Dashboard可包含多个Panel;  Panel可支持多种不同的图表,包括折线图、仪表盘等
3. 丰富的仪表盘模板, 可直接导入使用

Panel

图片描述 1. 六种类型。Graph,Singlestat,Heatmap, Dashlist,Table以及Text 2. 通用配置。 可通过变量实现Panel的动态加载, 参考[模板化Dashboard]https://github.com/yunlzheng/prometheus-book/blob/master/grafana/templating.md 3. metrics配置。 Prometheus的话,就是PromQL

其它更详细的配置可参考数据可视化

告警配置

1. 添加Notification channel
2. 设置告警内容

图片描述 图片描述

基本配置流程

  • 地址:http://grafana.deepwisdomai.com/
  • 添加第一步中Prometheus数据源,配置对应的Dashboard 和 Panel
  • 支持某个Panel进行单独的告警配置

后续迭代

- Ks项目级别的告警配置页面化
- 邮件+钉钉告警内容模板优化
- 内置/默认监控指标完善
- grafana监控面板归类整理

refer

1. https://segmentfault.com/a/1190000040756853
2. https://mp.weixin.qq.com/s/mbR_VX2G-exNRGKmwqqshA
3. https://github.com/yunlzheng/prometheus-book