您的位置:首页 > 健康 > 美食 > 创建全国文明城市宣传栏_保定头条新闻最新今天_英雄联盟更新公告最新_朋友圈推广

创建全国文明城市宣传栏_保定头条新闻最新今天_英雄联盟更新公告最新_朋友圈推广

2024/12/21 20:13:03 来源:https://blog.csdn.net/weixin_42670590/article/details/142452981  浏览:    关键词:创建全国文明城市宣传栏_保定头条新闻最新今天_英雄联盟更新公告最新_朋友圈推广
创建全国文明城市宣传栏_保定头条新闻最新今天_英雄联盟更新公告最新_朋友圈推广

一、下载对应的kube-prometheus源码

github地址:https://github.com/prometheus-operator/kube-prometheus

根据自己的Kubernetes版本下载对应的Kube-prometheus源码。

kubectl version

我的kubernetes的版本为v1.30.3固下载master分支的源码

1)进入目录

[root@k8s-master ~]# cd kube-prometheus
[root@k8s-master kube-prometheus]# ls
build.sh             docs             jsonnet                manifests
CHANGELOG.md         example.jsonnet  jsonnetfile.json       README.md
code-of-conduct.md   examples         jsonnetfile.lock.json  RELEASE.md
CONTRIBUTING.md      experimental     kustomization.yaml     scripts
DCO                  go.mod           LICENSE                sync-to-internal-registry.jsonnet
developer-workspace  go.sum           Makefile               tests
2)可以看到有个manifests目录这里面是我们所需的yaml,并且先运行manifests目录下setup中的yaml文件
[root@k8s-master kube-prometheus]# cd manifests/
[root@k8s-master manifests]# ls
会看到一个setup的文件夹
我们先执行这个文件夹这个里面会为我们创建命名空间
和一些基础清单
[root@k8s-master manifests]# kubectl create -f setup/

3)修改prometheus,grafana,alertmanager的yaml文件修改端口暴露为nodeport模式 为了能从外网访问

修改prometheus-service.yaml,添加NodePort类型和端口

修改prometheus-service.yaml文件,添加NodePort类型和端口

修改alertmanager-service.yaml文件添加NodePort类型和端口

进入kube-prometheus/manifests目录运行

cd kube-prometheus/manifests/
kubectl apply -f .

访问测试

通过以下命令查看相应的服务:

kubectl get svc -n monitoring

其中红框圈出的是比较关键的服务以及其对应的访问端口,但现在还无法访问grafan、prometheus以及alertmanger,因为prometheus operator内部默认配置了NetworkPolicy,需要删除其对应的资源,才可以通过外网访问:

cd ..  #需要到manifests的同级目录下运行
kubectl delete -f manifests/prometheus-networkPolicy.yaml
kubectl delete -f manifests/grafana-networkPolicy.yaml
kubectl delete -f manifests/alertmanager-networkPolicy.yaml

删除后,通过服务器ip:服务端口的形式,即可访问对应的服务了,在此,kube-prometheus的部署彻底完成。

grafana的默认账号和密码:admin/admin

alertmanager的登录界面

prometheus的登录界面

问题:

镜像:registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.0替换为:v5cn/prometheus-adapter:v0.12.0

registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.13.0替换为: 

quay.io/coreos/kube-state-metrics:latest

二、安装钉钉,并且配置钉钉

1)创建钉钉机器人

群聊设置中【添加机器人】-【自定义】

安全设置中勾选加签

需要保存Webhook和加签的秘钥,后面k3s往钉钉机器人群聊中发信息需要。

2)自定义机器人的监控配置文件

#cat dingtalk-config.yamlapiVersion: v1
kind: ConfigMap
metadata:name: dingtalk-confignamespace: monitoring
data:config.yml: |-templates:- /etc/prometheus-webhook-dingtalk/template.tmpl   #在dingtalk-deployment.yaml配置文件中已经把config配置文件挂载在容器的/etc/prometheus-webhook-dingtalk目录下了targets:webhook:url: https://oapi.dingtalk.com/robot/send?access_token=cbc36a81873b58b2374becf8a33f9053e02692a114ac7ecc1cc451caf19792a6secret: SEC5d83c04905da4d00454782242d3e5d36857f6088ee284523041521d6cc025b0dmention:all: true #@所有人webhook2:url: https://oapi.dingtalk.com/robot/send?access_token=4df2745e8df1de6d0429e35caf15e03secret: SECe079af795abd316a7e1f431ee8ebcf082cc0b0611a859datemplate.tmpl: |-    #下面这个模板文件是钉钉机器人的模板文件,可以自己定义{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }}{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver }}{{ end }}{{ define "__text_alert_list" }}{{ range . }}**Labels**{{ range .Labels.SortedPairs }} - {{ .Name }}: {{ .Value | markdown | html }}{{ end }}**Annotations**{{ range .Annotations.SortedPairs }} - {{ .Name }}: {{ .Value | markdown | html }}{{ end }}**Source:** [{{ .GeneratorURL }}]({{ .GeneratorURL }}){{ end }}{{ end }}{{ define "default.__text_alert_list" }}{{ range . }}---**告警级别:** {{ .Labels.severity | upper }}**运营团队:** {{ .Labels.team | upper }}**触发时间:** {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}**事件信息:**{{ range .Annotations.SortedPairs }} - {{ .Name }}: {{ .Value | markdown | html }}{{ end }}**事件标签:**{{ range .Labels.SortedPairs }}{{ if and (ne (.Name) "severity") (ne (.Name) "summary") (ne (.Name) "team") }} - {{ .Name }}: {{ .Value | markdown | html }}{{ end }}{{ end }}{{ end }}{{ end }}{{ define "default.__text_alertresovle_list" }}{{ range . }}---**告警级别:** {{ .Labels.severity | upper }}**运营团队:** {{ .Labels.team | upper }}**触发时间:** {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}**结束时间:** {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}**事件信息:**{{ range .Annotations.SortedPairs }} - {{ .Name }}: {{ .Value | markdown | html }}{{ end }}**事件标签:**{{ range .Labels.SortedPairs }}{{ if and (ne (.Name) "severity") (ne (.Name) "summary") (ne (.Name) "team") }} - {{ .Name }}: {{ .Value | markdown | html }}{{ end }}{{ end }}{{ end }}{{ end }}{{/* Default */}}{{ define "default.title" }}{{ template "__subject" . }}{{ end }}{{ define "default.content" }}#### \[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}\] **[{{ index .GroupLabels "alertname" }}]({{ template "__alertmanagerURL" . }})**{{ if gt (len .Alerts.Firing) 0 -}}{{ template "default.__text_alert_list" .Alerts.Firing }}{{- end }}{{ if gt (len .Alerts.Resolved) 0 -}}{{ template "default.__text_alertresovle_list" .Alerts.Resolved }}{{- end }}{{- end }}{{/* Legacy */}}{{ define "legacy.title" }}{{ template "__subject" . }}{{ end }}{{ define "legacy.content" }}#### \[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}\] **[{{ index .GroupLabels "alertname" }}]({{ template "__alertmanagerURL" . }})**{{ template "__text_alert_list" .Alerts.Firing }}{{- end }}{{/* Following names for compatibility */}}{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}

#cat dingtalk-deployment.yamlapiVersion: v1
kind: Service
metadata:name: dingtalknamespace: monitoringlabels:app: dingtalkannotations:prometheus.io/scrape: 'false'
spec:selector:app: dingtalkports:- name: dingtalkport: 8060protocol: TCPtargetPort: 8060---
apiVersion: apps/v1
kind: Deployment
metadata:name: dingtalknamespace: monitoring
spec:replicas: 1selector:matchLabels:app: dingtalktemplate:metadata:name: dingtalklabels:app: dingtalkspec:containers:- name: dingtalkimage: timonwong/prometheus-webhook-dingtalk:latestimagePullPolicy: IfNotPresentports:- containerPort: 8060volumeMounts:- name: configmountPath: /etc/prometheus-webhook-dingtalk  #dingtalk配置文件会挂载在容器内的该路径下volumes:- name: configconfigMap:name: dingtalk-config

3)启动

#需要先启动dingtalk-config.yaml,因为dingtalk-deployment.yaml依赖其中的configMap
kubectl apply -f dingtalk-config.yaml -f dingtalk-deployment.yaml
kubectl get pod -n monitoring

 kubectl get svc -n monitoring

4)配置alertmanager-secret.yaml 

备份alertmanager-secret.yaml,然后修改alertmanager-secret.yaml内容为如下内容

cp alertmanager-secret.yaml alertmanager-secret.yaml_bak
#cat  alertmanager-secret.yaml
apiVersion: v1
kind: Secret
metadata:labels:app.kubernetes.io/component: alert-routerapp.kubernetes.io/instance: mainapp.kubernetes.io/name: alertmanagerapp.kubernetes.io/part-of: kube-prometheusapp.kubernetes.io/version: 0.23.0name: alertmanager-mainnamespace: monitoring
stringData:alertmanager.yaml: |-"global":"resolve_timeout": "5m""receivers":- "name": "Webhook""webhook_configs":- "url": "http://dingtalk.monitoring.svc.cluster.local:8060/dingtalk/webhook/send" #重要表示monitoring中的名为dingtalk的svc服务"route":"group_by":- "namespace""group_wait": "30s"  #组告警等待时间,也就是告警产生后等待30s,如果有同一组告警一起发出"receiver": "Webhook""repeat_interval": "2m" #重复告警的间隔时间,减少报警发送频率"routes":- "matchers":- "alertname = Webhook""receiver": "Webhook"
type: Opaque

在 URL "http://dingtalk.monitoring.svc.cluster.local:8060/dingtalk/webhook/send" 中,各部分的含义如下:

  1. http:

    • 指定协议类型,这里使用的是 HTTP 协议。
  2. dingtalk.monitoring.svc.cluster.local:

    • 这是一个域名,通常用于 Kubernetes 集群内部的服务发现。
    • dingtalk: 表示具体的服务名称,指向处理钉钉通知的服务。
    • monitoring: 指定命名空间,表示该服务位于 monitoring 命名空间内。
    • svc: 表示这是一个 Kubernetes 服务(Service)。
    • cluster.local: 默认的集群域名,用于 Kubernetes 集群内的 DNS 解析。
  3. 8060:

    • 这是服务监听的端口号,表示该服务在 8060 端口上接收请求。
  4. /dingtalk/webhook/send:

    • 这是请求的路径,指向特定的 API 端点,用于发送 webhook 通知到钉钉。

5)启动

kubectl apply -f alertmanager-secret.yaml

6)测试验证告警

在/home/k8s/kube-prometheus-0.10.0/manifests的nodeExporter-prometheusRule.yaml中添加自定义的监控规则

/home/k8s/kube-prometheus-0.10.0/manifests
vim nodeExporter-prometheusRule.yaml
...- alert: demon-podannotations:description: filed  demon-pod < 2expr: sum(node_namespace_pod:kube_pod_info:{namespace="demon"}) < 2for: 2mlabels:team: podsseverity: critical- alert: Node内存可用大小10兆expr: node_memory_MemFree_bytes > 10for: 2mlabels:severity: criticalteam: podsannotations:description: 容器可用内存小于100k...

重新运行该规则文件,让其生效

kubectl apply -f nodeExporter-prometheusRule.yaml

进pod看配置是否刷进去了

隔一段时间后在Prometheus上查看是否有报警

隔一段时间后看钉钉是否有消息推送。

参考:

kube-prometheus部署(无坑版)-CSDN博客

Prometheus监控K8S集群并实现告警

bilibili视频:

让你快速入门Prometheus监控并实现邮箱报警_哔哩哔哩_bilibili

k8s 1.23.1 部署 prometheus 钉钉推送 自定义监控配置 promql基础语法_kube-prometheus 钉钉-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com