k8s--基础--26.7--监控告警系统--Alertmanager--发送报警到qq邮箱,钉钉

article/2025/10/4 17:02:11

k8s–基础–26.7–监控告警系统–Alertmanager–发送报警到qq邮箱,钉钉


1、创建alertmanager-cm.yaml文件

在master1节点操作

1.1、脚本

vi /root/k8s/monitor/alertmanager-cm.yaml

内容

kind: ConfigMap
apiVersion: v1
metadata:name: alertmanagernamespace: monitor-sa
data:alertmanager.yml: |-# 发送邮箱配置global:resolve_timeout: 1m#用于发送邮件的邮箱的SMTP服务器地址+端口smtp_smarthost: 'smtp.qq.com:465'# 从哪个邮箱发送报警smtp_from: '920786312@qq.com'# 发送邮箱的认证用户,不是邮箱名smtp_auth_username: '920786312@qq.com'# 发送邮箱的授权码而不是登录密码smtp_auth_password: 'poxuwotjhdbybdfb'smtp_require_tls: falseroute:group_by: [alertname]group_wait: 10sgroup_interval: 10srepeat_interval: 10mreceiver: default-receiver# 接收邮箱配置receivers:- name: 'default-receiver'# 接收邮箱地址email_configs:- to: '2637282556@qq.com'send_resolved: true

1.2、执行


kubectl apply  -f  /root/k8s/monitor/alertmanager-cm.yaml# 查看
kubectl get ConfigMap -n monitor-sa

在这里插入图片描述

2、修改prometheus-cfg.yaml文件

  1. 在master1节点操作
  2. prometheus-cfg.yaml,是用来存放prometheus配置信息

2.1、脚本

vi /root/k8s/monitor/prometheus-cfg.yaml

内容


kind: ConfigMap
apiVersion: v1
metadata:labels:app: prometheusname: prometheus-confignamespace: monitor-sa
data:prometheus.yml: |rule_files:- /etc/prometheus/rules.ymlalerting:alertmanagers:- static_configs:- targets: ["localhost:9093"]global:scrape_interval: 15sscrape_timeout: 10sevaluation_interval: 1mscrape_configs:- job_name: 'kubernetes-node'kubernetes_sd_configs:- role: noderelabel_configs:- source_labels: [__address__]regex: '(.*):10250'replacement: '${1}:9100'target_label: __address__action: replace- action: labelmapregex: __meta_kubernetes_node_label_(.+)- job_name: 'kubernetes-node-cadvisor'kubernetes_sd_configs:- role:  nodescheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)- target_label: __address__replacement: kubernetes.default.svc:443- source_labels: [__meta_kubernetes_node_name]regex: (.+)target_label: __metrics_path__replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor- job_name: 'kubernetes-apiserver'kubernetes_sd_configs:- role: endpointsscheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtbearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https- job_name: 'kubernetes-service-endpoints'kubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]action: replacetarget_label: __scheme__regex: (https?)- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]action: replacetarget_label: __metrics_path__regex: (.+)- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]action: replacetarget_label: __address__regex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2- action: labelmapregex: __meta_kubernetes_service_label_(.+)- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace- source_labels: [__meta_kubernetes_service_name]action: replacetarget_label: kubernetes_name - job_name: kubernetes-podskubernetes_sd_configs:- role: podrelabel_configs:- action: keepregex: truesource_labels:- __meta_kubernetes_pod_annotation_prometheus_io_scrape- action: replaceregex: (.+)source_labels:- __meta_kubernetes_pod_annotation_prometheus_io_pathtarget_label: __metrics_path__- action: replaceregex: ([^:]+)(?::\d+)?;(\d+)replacement: $1:$2source_labels:- __address__- __meta_kubernetes_pod_annotation_prometheus_io_porttarget_label: __address__- action: labelmapregex: __meta_kubernetes_pod_label_(.+)- action: replacesource_labels:- __meta_kubernetes_namespacetarget_label: kubernetes_namespace- action: replacesource_labels:- __meta_kubernetes_pod_nametarget_label: kubernetes_pod_name- job_name: 'kubernetes-schedule'scrape_interval: 5sstatic_configs:# kubernetes-schedule服务所在节点,即master节点- targets: ['192.168.187.154:10251']- job_name: 'kubernetes-controller-manager'scrape_interval: 5sstatic_configs:# kubernetes-controller-manager服务所在节点,即master节点- targets: ['192.168.187.154:10252']- job_name: 'kubernetes-kube-proxy'scrape_interval: 5sstatic_configs:# master节点,和node节点- targets: ['192.168.187.154:10249','192.168.187.155:10249']- job_name: 'kubernetes-etcd'scheme: httpstls_config:ca_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/ca.crtcert_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/server.crtkey_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/server.keyscrape_interval: 5sstatic_configs:# master节点 - targets: ['192.168.187.154:2379']# 报警规则rules.yml: |groups:- name: examplerules:- alert: kube-proxy的cpu使用率大于80%expr: rate(process_cpu_seconds_total{job=~"kubernetes-kube-proxy"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过80%"- alert:  kube-proxy的cpu使用率大于90%expr: rate(process_cpu_seconds_total{job=~"kubernetes-kube-proxy"}[1m]) * 100 > 90for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过90%"- alert: scheduler的cpu使用率大于80%expr: rate(process_cpu_seconds_total{job=~"kubernetes-schedule"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过80%"- alert:  scheduler的cpu使用率大于90%expr: rate(process_cpu_seconds_total{job=~"kubernetes-schedule"}[1m]) * 100 > 90for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过90%"- alert: controller-manager的cpu使用率大于80%expr: rate(process_cpu_seconds_total{job=~"kubernetes-controller-manager"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过80%"- alert:  controller-manager的cpu使用率大于90%,这里为了测试,实际是cpu使用率大于0%expr: rate(process_cpu_seconds_total{job=~"kubernetes-controller-manager"}[1m]) * 100 > 0for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过90%"- alert: apiserver的cpu使用率大于80%expr: rate(process_cpu_seconds_total{job=~"kubernetes-apiserver"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过80%"- alert:  apiserver的cpu使用率大于90%expr: rate(process_cpu_seconds_total{job=~"kubernetes-apiserver"}[1m]) * 100 > 90for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过90%"- alert: etcd的cpu使用率大于80%expr: rate(process_cpu_seconds_total{job=~"kubernetes-etcd"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过80%"- alert:  etcd的cpu使用率大于90%expr: rate(process_cpu_seconds_total{job=~"kubernetes-etcd"}[1m]) * 100 > 90for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}组件的cpu使用率超过90%"- alert: kube-state-metrics的cpu使用率大于80%expr: rate(process_cpu_seconds_total{k8s_app=~"kube-state-metrics"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.k8s_app}}组件的cpu使用率超过80%"value: "{{ $value }}%"threshold: "80%"      - alert: kube-state-metrics的cpu使用率大于90%,这里为了测试,实际是cpu使用率大于0%expr: rate(process_cpu_seconds_total{k8s_app=~"kube-state-metrics"}[1m]) * 100 > 0for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.k8s_app}}组件的cpu使用率超过90%"value: "{{ $value }}%"threshold: "90%"      - alert: coredns的cpu使用率大于80%expr: rate(process_cpu_seconds_total{k8s_app=~"kube-dns"}[1m]) * 100 > 80for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.k8s_app}}组件的cpu使用率超过80%"value: "{{ $value }}%"threshold: "80%"      - alert: coredns的cpu使用率大于90%expr: rate(process_cpu_seconds_total{k8s_app=~"kube-dns"}[1m]) * 100 > 90for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.k8s_app}}组件的cpu使用率超过90%"value: "{{ $value }}%"threshold: "90%"      - alert: kube-proxy打开句柄数>600expr: process_open_fds{job=~"kubernetes-kube-proxy"}  > 600for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>600"value: "{{ $value }}"- alert: kube-proxy打开句柄数>1000expr: process_open_fds{job=~"kubernetes-kube-proxy"}  > 1000for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>1000"value: "{{ $value }}"- alert: kubernetes-schedule打开句柄数>600expr: process_open_fds{job=~"kubernetes-schedule"}  > 600for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>600"value: "{{ $value }}"- alert: kubernetes-schedule打开句柄数>1000expr: process_open_fds{job=~"kubernetes-schedule"}  > 1000for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>1000"value: "{{ $value }}"- alert: kubernetes-controller-manager打开句柄数>600expr: process_open_fds{job=~"kubernetes-controller-manager"}  > 600for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>600"value: "{{ $value }}"- alert: kubernetes-controller-manager打开句柄数>1000expr: process_open_fds{job=~"kubernetes-controller-manager"}  > 1000for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>1000"value: "{{ $value }}"- alert: kubernetes-apiserver打开句柄数>600expr: process_open_fds{job=~"kubernetes-apiserver"}  > 600for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>600"value: "{{ $value }}"- alert: kubernetes-apiserver打开句柄数>1000expr: process_open_fds{job=~"kubernetes-apiserver"}  > 1000for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>1000"value: "{{ $value }}"- alert: kubernetes-etcd打开句柄数>600expr: process_open_fds{job=~"kubernetes-etcd"}  > 600for: 2slabels:severity: warnningannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>600"value: "{{ $value }}"- alert: kubernetes-etcd打开句柄数>1000expr: process_open_fds{job=~"kubernetes-etcd"}  > 1000for: 2slabels:severity: criticalannotations:description: "{{$labels.instance}}的{{$labels.job}}打开句柄数>1000"value: "{{ $value }}"- alert: corednsexpr: process_open_fds{k8s_app=~"kube-dns"}  > 600for: 2slabels:severity: warnning annotations:description: "插件{{$labels.k8s_app}}({{$labels.instance}}): 打开句柄数超过600"value: "{{ $value }}"- alert: corednsexpr: process_open_fds{k8s_app=~"kube-dns"}  > 1000for: 2slabels:severity: criticalannotations:description: "插件{{$labels.k8s_app}}({{$labels.instance}}): 打开句柄数超过1000"value: "{{ $value }}"- alert: kube-proxyexpr: process_virtual_memory_bytes{job=~"kubernetes-kube-proxy"}  > 2000000000for: 2slabels:severity: warnningannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 使用虚拟内存超过2G"value: "{{ $value }}"- alert: schedulerexpr: process_virtual_memory_bytes{job=~"kubernetes-schedule"}  > 2000000000for: 2slabels:severity: warnningannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 使用虚拟内存超过2G"value: "{{ $value }}"- alert: kubernetes-controller-managerexpr: process_virtual_memory_bytes{job=~"kubernetes-controller-manager"}  > 2000000000for: 2slabels:severity: warnningannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 使用虚拟内存超过2G"value: "{{ $value }}"- alert: kubernetes-apiserverexpr: process_virtual_memory_bytes{job=~"kubernetes-apiserver"}  > 2000000000for: 2slabels:severity: warnningannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 使用虚拟内存超过2G"value: "{{ $value }}"- alert: kubernetes-etcdexpr: process_virtual_memory_bytes{job=~"kubernetes-etcd"}  > 2000000000for: 2slabels:severity: warnningannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 使用虚拟内存超过2G"value: "{{ $value }}"- alert: kube-dnsexpr: process_virtual_memory_bytes{k8s_app=~"kube-dns"}  > 2000000000for: 2slabels:severity: warnningannotations:description: "插件{{$labels.k8s_app}}({{$labels.instance}}): 使用虚拟内存超过2G"value: "{{ $value }}"- alert: HttpRequestsAvgexpr: sum(rate(rest_client_requests_total{job=~"kubernetes-kube-proxy|kubernetes-kubelet|kubernetes-schedule|kubernetes-control-manager|kubernetes-apiservers"}[1m]))  > 1000for: 2slabels:team: adminannotations:description: "组件{{$labels.job}}({{$labels.instance}}): TPS超过1000"value: "{{ $value }}"threshold: "1000"   - alert: Pod_restartsexpr: kube_pod_container_status_restarts_total{namespace=~"kube-system|default|monitor-sa"} > 0for: 2slabels:severity: warnningannotations:description: "在{{$labels.namespace}}名称空间下发现{{$labels.pod}}这个pod下的容器{{$labels.container}}被重启,这个监控指标是由{{$labels.instance}}采集的"value: "{{ $value }}"threshold: "0"- alert: Pod_waitingexpr: kube_pod_container_status_waiting_reason{namespace=~"kube-system|default"} == 1for: 2slabels:team: adminannotations:description: "空间{{$labels.namespace}}({{$labels.instance}}): 发现{{$labels.pod}}下的{{$labels.container}}启动异常等待中"value: "{{ $value }}"threshold: "1"   - alert: Pod_terminatedexpr: kube_pod_container_status_terminated_reason{namespace=~"kube-system|default|monitor-sa"} == 1for: 2slabels:team: adminannotations:description: "空间{{$labels.namespace}}({{$labels.instance}}): 发现{{$labels.pod}}下的{{$labels.container}}被删除"value: "{{ $value }}"threshold: "1"- alert: Etcd_leaderexpr: etcd_server_has_leader{job="kubernetes-etcd"} == 0for: 2slabels:team: adminannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 当前没有leader"value: "{{ $value }}"threshold: "0"- alert: Etcd_leader_changesexpr: rate(etcd_server_leader_changes_seen_total{job="kubernetes-etcd"}[1m]) > 0for: 2slabels:team: adminannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 当前leader已发生改变"value: "{{ $value }}"threshold: "0"- alert: Etcd_failedexpr: rate(etcd_server_proposals_failed_total{job="kubernetes-etcd"}[1m]) > 0for: 2slabels:team: adminannotations:description: "组件{{$labels.job}}({{$labels.instance}}): 服务失败"value: "{{ $value }}"threshold: "0"- alert: Etcd_db_total_sizeexpr: etcd_debugging_mvcc_db_total_size_in_bytes{job="kubernetes-etcd"} > 10000000000for: 2slabels:team: adminannotations:description: "组件{{$labels.job}}({{$labels.instance}}):db空间超过10G"value: "{{ $value }}"threshold: "10G"- alert: Endpoint_readyexpr: kube_endpoint_address_not_ready{namespace=~"kube-system|default"} == 1for: 2slabels:team: adminannotations:description: "空间{{$labels.namespace}}({{$labels.instance}}): 发现{{$labels.endpoint}}不可用"value: "{{ $value }}"threshold: "1"- name: 物理节点状态-监控告警rules:- alert: 物理节点cpu使用率expr: 100-avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)*100 > 90for: 2slabels:severity: ccriticalannotations:summary: "{{ $labels.instance }}cpu使用率过高"description: "{{ $labels.instance }}的cpu使用率超过90%,当前使用率[{{ $value }}],需要排查处理" - alert: 物理节点内存使用率expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100 > 90for: 2slabels:severity: criticalannotations:summary: "{{ $labels.instance }}内存使用率过高"description: "{{ $labels.instance }}的内存使用率超过90%,当前使用率[{{ $value }}],需要排查处理"- alert: InstanceDownexpr: up == 0for: 2slabels:severity: criticalannotations:   summary: "{{ $labels.instance }}: 服务器宕机"description: "{{ $labels.instance }}: 服务器延时超过2分钟"- alert: 物理节点磁盘的IO性能expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60for: 2slabels:severity: criticalannotations:summary: "{{$labels.mountpoint}} 流入磁盘IO使用率过高!"description: "{{$labels.mountpoint }} 流入磁盘IO大于60%(目前使用:{{$value}})"- alert: 入网流量带宽expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400for: 2slabels:severity: criticalannotations:summary: "{{$labels.mountpoint}} 流入网络带宽过高!"description: "{{$labels.mountpoint }}流入网络带宽持续5分钟高于100M. RX带宽使用率{{$value}}"- alert: 出网流量带宽expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400for: 2slabels:severity: criticalannotations:summary: "{{$labels.mountpoint}} 流出网络带宽过高!"description: "{{$labels.mountpoint }}流出网络带宽持续5分钟高于100M. RX带宽使用率{{$value}}"- alert: TCP会话expr: node_netstat_Tcp_CurrEstab > 1000for: 2slabels:severity: criticalannotations:summary: "{{$labels.mountpoint}} TCP_ESTABLISHED过高!"description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"- alert: 磁盘容量expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80for: 2slabels:severity: criticalannotations:summary: "{{$labels.mountpoint}} 磁盘分区使用率过高!"description: "{{$labels.mountpoint }} 磁盘分区使用大于80%(目前使用:{{$value}}%)"

注意:通过上面命令生成的promtheus-cfg.yaml文件会有一些问题,$1和$2这种变量在文件里没有,需要在k8s的master1节点打开promtheus-cfg.yaml文件,手动把$1和$2这种变量写进文件里。

2.2、执行


kubectl apply  -f  /root/k8s/monitor/prometheus-cfg.yaml# 查看
kubectl get ConfigMap -n monitor-sa

在这里插入图片描述

3、修改 prometheus-deploy.yaml 文件

3.1、脚本

vi /root/k8s/monitor/prometheus-deploy.yaml

内容

apiVersion: apps/v1
kind: Deployment
metadata:# Deployment 名称name: prometheus-server# Deployment 名称空间namespace: monitor-sa# Deployment 标签labels:app: prometheus
spec:replicas: 1# 标签选择器,选择对应标签的模板selector:matchLabels:app: prometheuscomponent: server#matchExpressions:#- {key: app, operator: In, values: [prometheus]}#- {key: component, operator: In, values: [server]}# 定义模板template:metadata:# 定义标签labels:app: prometheuscomponent: server# 定义注解annotations:prometheus.io/scrape: 'false'spec:# pod运行的节点# k8s集群的哪个node节点创建/monitor/data,就让pod调度到哪个节点。nodeName: node1# 使用的SA账号serviceAccountName: monitor# 定义容器containers:# 容器名称- name: prometheus# 镜像地址image: prom/prometheus:v2.2.1# 镜像拉取策略imagePullPolicy: IfNotPresent# 如果命令存在就使用这个命令,不使用容器的ENTRYPOINT命令# 也就是启动容器的命令command:- "/bin/prometheus"args:- "--config.file=/etc/prometheus/prometheus.yml"- "--storage.tsdb.path=/prometheus"- "--storage.tsdb.retention=24h"- "--web.enable-lifecycle"# 配置端口ports:- containerPort: 9090protocol: TCP# 设置挂载点volumeMounts:- mountPath: /etc/prometheusname: prometheus-config- mountPath: /prometheus/name: prometheus-storage-volume- name: k8s-certsmountPath: /var/run/secrets/kubernetes.io/k8s-certs/etcd/- name: alertmanagerimage: prom/alertmanager:v0.14.0imagePullPolicy: IfNotPresentargs:- "--config.file=/etc/alertmanager/alertmanager.yml"- "--log.level=debug"ports:- containerPort: 9093protocol: TCPname: alertmanagervolumeMounts:- name: alertmanager-configmountPath: /etc/alertmanager- name: alertmanager-storagemountPath: /alertmanager- name: localtimemountPath: /etc/localtime# 设置存储卷volumes:# 存储卷名称- name: prometheus-config# configMap类型的挂载configMap:# 使用名称为prometheus-config的configMapname: prometheus-config- name: prometheus-storage-volumehostPath:path: /monitor/datatype: Directory- name: k8s-certssecret:secretName: etcd-certs- name: alertmanager-configconfigMap:name: alertmanager- name: alertmanager-storagehostPath:path: /monitor/data/alertmanagertype: DirectoryOrCreate- name: localtimehostPath:path: /usr/share/zoneinfo/Asia/Shanghai

3.2、部署前

部署prometheus需要生成一个etcd-certs

kubectl -n monitor-sa create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.key  --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/ca.crt

3.3、执行


kubectl apply  -f  /root/k8s/monitor/prometheus-deploy.yaml# 查看
kubectl get Deployment -n monitor-sa
kubectl get pods -n monitor-sa -o wide

在这里插入图片描述

4、部署alertmanager

4.1、脚本

vi /root/k8s/monitor/alertmanager-svc.yaml

内容

apiVersion: v1
kind: Service
metadata:labels:name: prometheuskubernetes.io/cluster-service: 'true'# 服务名称 alertmanager服务name: alertmanager# 使用名称空间namespace: monitor-sa
spec:# 设置端口ports:- name: alertmanagernodePort: 30066port: 9093protocol: TCPtargetPort: 9093# 定义选择对应标签的pod(prometheus-server的POD)selector:app: prometheussessionAffinity: Nonetype: NodePort

4.2、执行


kubectl apply  -f  /root/k8s/monitor/alertmanager-svc.yaml# 查看
kubectl get svc -n monitor-sa

在这里插入图片描述

alertmanager的service暴露的端口是30066

5、验证

5.1、访问prometheus的web界面

http://192.168.187.154:30747

在这里插入图片描述

在这里插入图片描述

5.2、访问alertmanager web界面

http://192.168.187.154:30066 

在这里插入图片描述

5.3、登录邮箱

在这里插入图片描述

内容

在这里插入图片描述

6、发送报警到钉钉

基于上面的配置,只要做如下步骤就可以成功。

6.1、创建钉钉机器人


打开电脑版钉钉,创建一个群,创建自定义机器人,按如下步骤创建
https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq我创建的机器人如下:
群设置-->智能群助手-->添加机器人-->自定义-->添加机器人名称:kube-event
接收群组:钉钉报警测试安全设置:
自定义关键词:cluster1上面配置好之后点击完成即可,这样就会创建一个kube-event的报警机器人,创建机器人成功之后怎么查看webhook,按如下:点击智能群助手,可以看到刚才创建的kube-event这个机器人,点击kube-event,就会进入到kube-event机器人的设置界面
出现如下内容:
机器人名称:kube-event
接受群组:钉钉报警测试
消息推送:开启
webhook:https://oapi.dingtalk.com/robot/send?access_token=9c03ff1f47b1d15a10d852398cafb84f8e81ceeb1ba557eddd8a79e5a5e5548e
安全设置:
自定义关键词:cluster1

6.2、安装钉钉的webhook插件

在k8s的master1节点操作

tar zxvf prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz

在这里插入图片描述

6.3、启动钉钉报警插件

cd prometheus-webhook-dingtalk-0.3.0.linux-amd64
nohup ./prometheus-webhook-dingtalk --web.listen-address="0.0.0.0:8060" --ding.profile="cluster1=https://oapi.dingtalk.com/robot/send?access_token=9c03ff1f47b1d15a10d852398cafb84f8e81ceeb1ba557eddd8a79e5a5e5548e" &

注意:
cluster1=webhook内容

6.4、修改alertmanager-cm.yaml文件

cp alertmanager-cm.yaml alertmanager-cm.yaml.bak

新alertmanager-cm.yaml内容

kind: ConfigMap
apiVersion: v1
metadata:name: alertmanagernamespace: monitor-sa
data:alertmanager.yml: |-global:resolve_timeout: 1m#用于发送邮件的邮箱的SMTP服务器地址+端口smtp_smarthost: 'smtp.qq.com:465'# 从哪个邮箱发送报警smtp_from: '920786312@qq.com'# 发送邮箱的认证用户,不是邮箱名smtp_auth_username: '920786312@qq.com'# 发送邮箱的授权码而不是登录密码smtp_auth_password: 'poxuwotjhdbybdfb'smtp_require_tls: falseroute:group_by: [alertname]group_wait: 10sgroup_interval: 10srepeat_interval: 10mreceiver: cluster1receivers:- name: cluster1webhook_configs:# 钉钉的地址- url: 'http://192.168.1.1:8060/dingtalk/cluster1/send'send_resolved: true

6.5、使配置生效

 
kubectl delete -f alertmanager-cm.yaml 
kubectl  apply  -f alertmanager-cm.yamlkubectl delete -f prometheus-cfg.yaml 
kubectl apply  -f prometheus-cfg.yamlkubectl delete  -f prometheus-deploy.yaml
kubectl apply  -f  prometheus-deploy.yaml

http://chatgpt.dhexx.cn/article/MW06N7Hh.shtml

相关文章

lazarus Textout中文字符串乱码

https://wenda.so.com/q/1560151974218812 lazarus Textout中文字符串乱码 5取nmlgb10级分类&#xff1a;编程开发被浏览146次2019.06.10 检举 我用Textout在窗口输出 你好系统却显示其它字体&#xff0c;求懂内行的帅哥美女指教一下&#xff0c;这是我的代码 TextOutA(hdcb,10…

VS2010 MFC TextOut垂直显示内容的显示、清除和修改

学习MFC&#xff0c;用到垂直显示内容&#xff0c;在网上查找了一些方法&#xff0c;做一下总结。 在View类的头文件中增加CString m_strLeft&#xff1b; 在View类中增加WM_PAINT消息的函数OnPaint&#xff08;&#xff09;&#xff0c;设置输出字体&#xff0c;设置颜色 CPai…

CDC在OnPaint函数中采用TextOut函数初始化静态文本框

创建静态文本框之后如果想要在程序段中初始话文本框中的内容可以采用CDC类中的TextOut()函数&#xff0c;但是如果在OnPaint&#xff08;&#xff09;中直接书写代码会导致待输出字符被静态文本框覆盖这是因为对话框上的文本控件是在对话框显示后才画上去的&#xff0c;所以用t…

8.向窗口输出文字 : TextOut 和 DrawText 函数

使用 DrawText() 向客户区的中间位置输出了一段文本&#xff0c;说一下文字的输出。 设备环境&#xff08;DC&#xff09; 在Windows中&#xff0c;一切能在显示器上看到的都是图形&#xff0c;不但包括点、线、矩形、圆等&#xff0c;也包括文字、字体。对用户来说文字和图片…

pdc-textout(_PDC-结论

pdc->textout( Oh, yes, PDC was the shiznit. We learned about the Pillars of Longhorn: 哦&#xff0c;是的&#xff0c;PDC真是愚蠢。 我们了解了Longhorn的Struts&#xff1a; Lornhorn - Its ALPHA, but its real. Feel free to peruse the SDK. Theres 3 years of…

封印(TextOut函数实际应用)

C中有一个函数&#xff1a;TextOut&#xff0c;这个函数有很多分枝&#xff0c;TextOutA&#xff0c;TextOutW。。。。都在windows.h头文件里面 这个函数干嘛用呢&#xff1f;就是在给定的HDC中显示文字。。 结果被我们坑人党知道了 嘿嘿嘿&#xff0c;于是我们写了个东西&am…

windows文本绘制 TextOut、DrawText、CreateFont、SetTextColor、SetBkColor、SetBkMode

文本绘制 TextOut-将文字绘制在指定坐标位置 DrawText-在矩形区域绘制字符串 int DrawText(HDC hdc, //DC句柄LPCSTR lpString, //字符串int nCount, //字符串长度LPRECT lpRect, //绘制文字的矩形框UINT uFormat //绘制的方式,重点&#xff0c;花样繁多的关键点 );绘制文字样…

MFC textout()输出字体设置

//设置字体 CFont font; font.CreateFont(33, // 字体的高度 0, // 字体的宽度 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight 字体的粗细FALSE, // bItalic 字体是否斜体 FALSE, …

gdi 编程c语言pdf,二、Windows编程GDI—TextOut细节

TextOut是用于显示文字的最常用的GDI函数。语法是&#xff1a; TextOut (hdc, x, y, psText, iLength) ; 以下将详细地讨论这个函数。 第一个参数是设备内容句柄&#xff0c;它既可以是GetDC的传回值&#xff0c;也可以是在处理WM_PAINT消息时BeginPaint的传回值。 设备内容的属…

中年人学C语言Windows程序设计,3 窗口中文本的输出TextOut

中年人学C语言Windows程序设计&#xff0c;3 文本的输出TextOut 函数功能 TextOut 函数使用当前选择的字体、背景颜色和文本颜色&#xff0c;将一个字符串绘制于窗口的指定位置。 API 函数原型&#xff1a; 注释&#xff1a;In 说明该参数是输入的&#xff0c;opt 说明该参…

c语言textout字体大小,《WINDOWS程序设计》第四章关于TEXTOUT的小问题

《WINDOWS程序设计》第四章关于TEXTOUT的小问题 文章原文是这样说的&#xff1a; 您会发现常常需要显示格式化的数字跟简单的字符串。我在第二章讲到过&#xff0c;您不能使惯用的工具(可 爱的printf 函数)来完成这项工作&#xff0c;但是可以使用sprintf 和Windows 版的sprint…

c语言textout字体大小,textout函数怎么用

MFC里 用pDC->TextOut 这个函数怎么实现未知数据输我最近刚开始学计算机图形学还是个纯小白…… 不大懂 想问各路大神。比如欢迎来到CSS布局HTML,TextOut 是用来输出文本的;你说的问题,我看了半天没看懂,你可以是想先格式化字符串再输出是吧,可以如下: 用CString格式化…

Windows API——TextOut()函数学习

1.函数功能 The TextOut function writes a character string at the specified location, using the currently selected font, background color, and text color. TextOut函数使用当前选定的字体、背景颜色和文本颜色在指定位置写入字符串。 2.函数原型 BOOL TextOutA( …

35.文本输出函数TabbedTextOut、ExtTextOut、TextOut、SetBkColor

TextOut和TabbedTextOut、ExtTextOut的区别 TextOut是简单文本输出&#xff0c;不带格式的&#xff0c;可以控制文本的对齐方式 TabbedTextOut是可以控制带\t&#xff08;制表符号&#xff09;的文本 ExtTextOut是在TextOut的基础上&#xff0c;增加字符间距、背景颜色和剪裁框…

windows编程之TextOut与DrawText -- 文本输出实验

文章目录 windows编程之TextOut与DrawText -- 文本输出实验实验名称实验目的实验要求实验源码思考题 windows编程之TextOut与DrawText – 文本输出实验 实验名称 实验3-2-文本输出实验 实验目的 1&#xff0e;掌握常用的文本输出函数TextOut、DrawText的使用&#xff0c;熟悉其…

Monkey的测试

1.Monkey介绍 顾名思义&#xff0c;Monkey就是猴子&#xff0c; Monkey测试&#xff0c;就像一只猴子&#xff0c; 在电脑面前&#xff0c;乱敲键盘在测试。 猴子什么都不懂&#xff0c; 只知道乱敲 通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的…

MonkeyTest——简单无脑的移动端自动化测试(初级篇)

MonkeyTest-操作步骤&#xff1a; 1.下载Android sdk X64位&#xff0c;必须和你的电脑操作系统一致。 2.安装完成后&#xff0c;增加adb的系统环境。 A.找到sdk路径。 默认路径&#xff1a;C:\Users\ZSD\AppData\Local\Android\android-sdk\platform-tools B.打开系统环境设置…

【转】指定页面进行Monkey测试

偶然在网上查看到这个技术&#xff0c;感兴趣&#xff0c;就记录下【感谢博主分享】 1.原文再此&#xff1a;https://blog.csdn.net/liyu520131414/article/details/69357777?utm_sourceblogxgwz3 原理原文博主已经讲清楚了&#xff0c;就不粘贴了&#xff0c;下面&#xff…

Android测试-Monkey Test

APP开发过程中&#xff0c;开人员往往自己做一些功能测试和稳定性测试&#xff0c;使用MonkeyTest做压力测试是常用方法&#xff0c;及时修复ANR、CRASH提高项目组整体的开发效率。 一、Monkey简介 Monkey是一种命令行工具&#xff0c;这个工具存在于Android系统/system/frame…

Monkey测试(一)

简介常见参数日志分析简单脚本编写 一&#xff1a;简介 Monkey测试是Android平台自动化测试的一种手段&#xff0c; 通过Monkey程序模拟用户触摸屏幕、滑动&#xff0c;Trackball&#xff08;轨迹球&#xff09;、按键等操作来对设备上的程序进行压力测试&#xff0c; 检测程序…