关于计划任务的一个小需求-优化
一、优化篇
(下篇写个问题篇,我也不知道怎么解决。。。是完成这个需求过程中遇到的)
优化主要体现在:报警内容输出,grafana展示图
1、钉钉报警输出内容优化
原报警输出如下:
优化主要包含以下几点:
(1)主题添加链接到报警页面
(2)简化报警内容,去掉干扰信息(summary,alertname这些冒号:左边的文字)
(3)优化事件信息,报警信息输出主机名,不是ip+端口(process-exporter的监听端口)
(4)颜色标记并输出状态,划分告警中/已处理
改良版本如下图:
优化具体实现(大家对着上面的优化点去看)
(1)(2)(4)点都需要在dingtalk读取的go模板改,我直接贴代码
(1)超链接: {{ define "__alertmanagerURL" }} http://alertmanager机器的公网ip:9090/alerts{{ end }}
(2)去掉模板上的 {{ .Name }}:
(3)粗体颜色标记对应: <font color=#008000 size=3 face="黑体"><strong>状态:已解决</strong></font>
1 {{ define "__subject" }}[告警中] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }} 2 3 {{ define "__alertmanagerURL" }} http://alertmanager机器的公网ip:9090/alerts{{ end }} 4 5 {{ define "__text_alert_list" }}{{ range . }} 6 **Labels** 7 {{ range .Labels.SortedPairs }}> - {{ .Name }}: {{ .Value | markdown | html }} 8 {{ end }} 9 **Annotations** 10 {{ range .Annotations.SortedPairs }}> - {{ .Name }}: {{ .Value | markdown | html }} 11 {{ end }} 12 **Source:** [{{ .GeneratorURL }}]({{ .GeneratorURL }}) 13 {{ end }}{{ end }} 14 15 {{ define "default.__text_alert_list" }}{{ range . }} 16 --- 17 <font color=#FF0000 size=3 face="黑体"><strong>状态: 告警中</strong></font> 18 19 **告警主机: {{ .Labels.nodename }}** 20 21 **告警级别:** {{ .Labels.severity | upper }} 22 23 **告警触发时间:** {{ dateInZone "2006-01-02 15:04:05" (.StartsAt) "Asia/Shanghai" }} 24 25 **事件信息:** 26 {{ range .Annotations.SortedPairs }}> - {{ .Value | markdown | html }} 27 28 29 {{ end }} 30 31 {{ end }} 32 {{ end }} 33 {{ define "default.__text_alertresovle_list" }}{{ range . }} 34 --- 35 36 <font color=#008000 size=3 face="黑体"><strong>状态:已解决</strong></font> 37 38 **告警主机: {{ .Labels.nodename }}** 39 40 **告警级别:** {{ .Labels.severity | upper }} 41 42 **告警触发时间:** {{ dateInZone "2006-01-02 15:04:05" (.StartsAt) "Asia/Shanghai" }} 43 44 **告警结束时间:** {{ dateInZone "2006-01-02 15:04:05" (.EndsAt) "Asia/Shanghai" }} 45 46 **事件信息:** 47 {{ range .Annotations.SortedPairs }}> - {{ .Value | markdown | html }} 48 49 {{ end }} 50 51 {{ end }} 52 {{ end }} 53 54 {{/* Default */}} 55 {{ define "default.title" }}{{ template "__subject" . }}{{ end }} 56 {{ define "default.content" }}#### [ 主题 ] **[{{ index .GroupLabels "alertname" }}]({{ template "__alertmanagerURL" . }})** 57 {{ if gt (len .Alerts.Firing) 0 -}} 58 {{ template "default.__text_alert_list" .Alerts.Firing }} 59 60 61 {{- end }} 62 63 {{ if gt (len .Alerts.Resolved) 0 -}} 64 {{ template "default.__text_alertresovle_list" .Alerts.Resolved }} 65 66 67 {{- end }} 68 {{- end }} 69 70 {{/* Legacy */}} 71 {{ define "legacy.title" }}{{ template "__subject" . }}{{ end }} 72 {{ define "legacy.content" }}#### [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] **[{{ index .GroupLabels "alertname" }}]({{ template "__alertmanagerURL" . }})** 73 {{ template "__text_alert_list" .Alerts.Firing }} 74 {{- end }} 75 76 {{/* Following names for compatibility */}} 77 {{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }} 78 {{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
其中报警信息输出主机名需要在prometheus定义labels变量,然后报警规则上引用这个变量,如下:
2、grafana展示图优化
原显示图:
优化主要包含以下几点:
(1)改成gauge图,一目了然知道当前进程状态(颜色区分healthy和unhealthy)
(2)添加table图,展示30s内最近3条数据,表格头文字表示
优化具体实现
(1)颜色区分健康状态
用映射的range范围去设置
(2)table图显示最近3条探测数据:
表格头文字表示
transform设置Organize fields,写上具体代表的中文表示
时间按降序排序,点击时间字样,然后应用保存这个表格,下次打开就一直是降序排序了