服务可见性范畴
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