Prometheus 部署
- helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- helm repo update
- kubectl create ns prometheus
- helm install prometheus prometheus-community/prometheus --namespace=prometheus
- kubectl -n prometheus expose deployment prometheus-server --port=9090 --target-port=9090 --name=prometheus-data
- kubectl -n prometheus get services prometheus-data
#记录该service的clusterIP用作Grafana的数据源
Grafana 部署
- helm repo add grafana https://grafana.github.io/helm-charts
- helm repo update
- kubectl create ns grafana
- helm install grafana grafana/grafana --namespce=grafana
- kubectl -n grafana expose deployment grafana --port=3000 --target-port=3000 --type=NodePort –
name=grafana-ui - 获取grafana 初始登陆用户和密码
i. kubectl -n grafana get secret grafana -o jsonpath=‘{.data.admin-user}’ |base64 -d
ii. kubectl -n grafana get secret grafana -o jsonpath=‘{.data.admin-password}’ |base64 -d - 访问<Node_IP>:<Node_Port>登陆后添加数据源
i.
ii. 在dashboard中查询资源指标
可选:集成Events指标收集插件
- 通过下面的yaml来部署event-exporter
i. Kubectl apply -f deployment.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: event-exporter
labels:
name: event-exporter
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
name: event-exporter
name: event-exporter
subjects:
- kind: ServiceAccount
name: event-exporter
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: event-exporter
name: event-exporter
spec:
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app: event-exporter
strategy:
type: RollingUpdate
template:
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: '9102'
prometheus.io/scrape: 'true'
labels:
app: event-exporter
spec:
containers:
- name: event-exporter
image: 'caicloud/event-exporter:v1.0.0'
imagePullPolicy: Always
args:
- --eventType=Warning
- --eventType=Normal
ports:
- containerPort: 9102
name: http
resources:
limits:
memory: 100Mi
requests:
memory: 40Mi
serviceAccountName: event-exporter
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
labels:
name: event-exporter
name: event-exporter
spec:
ports:
- name: http
port: 9102
targetPort: 9102
selector:
app: event-exporter
- 实现方式(上述Deployment已经添加过annotations):
a) 通过events_exporter中添加的annotations
annotations:
prometheus.io/path: /metrics
prometheus.io/port: '9102'
prometheus.io/scrape: 'true'
b) 或者通过configmap添加prometheus job
- job_name: 'event_exporter'
static_configs:
- targets: ['<event-exporter address>:9102']
- 等待十分钟,Prometheus会根据deployment注解自动加载event-exporter采集到的数据。
PromQL语法参考:https://prometheus.io/docs/prometheus/latest/querying/basics/
邮件告警配置
- 配置Grafana SMTP发信规则
备注:可以通过kubectl edit方式在线修改该configmap,也可以将其输出成yaml或json文件,离线修改完重新apply。
host: 发信方邮箱服务器地址,465端口使用TLS传输协议,25端口不使用。具体根据邮箱服务器的传输配置而定。
user: Grafana使用的发信方邮箱账号
password: Grafna使用的发信方邮箱账号密码
from_address: Grafana使用的发信方邮箱地址
from_name: Grafana使用的可被收件人查看的发信人姓名
-
创建 Contact point
(1)
(2)
(3)
Test 按钮可测试Grafana发信功能是否正常 -
配置默认Notification policies
Root policy – default for all alerts,用于配置默认的告警联系人,在此策略下,默认所有被触发的告警规则都会发送到该联系人。如果需要针对不同的告警规则配置不同的告警联系人则选择创建并配置下面的“Specific routing”模块
-
创建Alert Rules
(1)
(2)
(3)主要配置Alert的一些基本信息
(4) 可选:
一般如需要针对不同的告警规则通知不同的联系人才需要配置Labels
(5)
-
告警展示
依据前边的步骤,一个基础的告警流程配置就完成了,根据配置的Alert rule,触发后该rule会出现如下图提示,并同步发送告警邮件。
企微告警配置
这部分只给出企微机器人 Contact points的配置,其余部分同邮件告警一致,如果需要针对不同的Alert rules分别发送给邮件或者企微机器人,则需要注意两个步骤1.Alert rules添加相应的Labels;2.Notification policies中针对相应的Labels配置不同的Specific routing;上述步骤中只更换Root Policy仅作测试用,它适用于所有未配置Specific routing的Alert rules。
- 创建 Contact point
(1)
(2)
a. Webhook URL在创建企微机器人时自动生成,复制记录下来就可。
b. Test 按钮可测试企微机器人告警功能是否正常
后续准备将集成飞书告警的相关步骤更新出来,敬请期待…