注册
【与达梦同行】监控系列(四)Prometheus的自定义配置DM的告警监控项(短信/邮件)
技术分享/ 文章详情 /

【与达梦同行】监控系列(四)Prometheus的自定义配置DM的告警监控项(短信/邮件)

卖女孩的小废柴 2022/12/19 3320 0 1

文章地址

dm+prometheus+grafana的地址,请跳转到连接查看
监控系列(一)Dm8+Prometheus+Grafana搭建
监控系列(二)Dem对接Prometheus+grafana显示
监控系列(三)自定义DM采集项(exporter)+主机监控+grafana展示
监控系列(四)Prometheus的自定义配置DM的告警监控项(短信/邮件)
监控系列(五)利用半自动部署工具十分钟搞定达梦与prometheus监控部署

一、概括

  1. 整体的搭建以及配置前面都已经写了详细的步骤,现在对这个图应该有初步了解了。
    image.png

  2. Prometheus告警是通过自身的Alertmanager组件实现的,所以需要搭建Alertmanager以及配置相关的告警规则

image.png

image.png

二、安装告警alertmanager

1. alertmanager下载

Prometheus是一个划分平台,metrics的收集和存储与警报是分开的,警报是由Alertmanager负责,这是监控环境的独立部分。警报的规则是在Prometheus server上进行定义的,这些规则可以触发时间,然后将其传到alertmanager,alertmanager随后决定如何处理各自的警报,处理复制之类的问题,并决定在发送警报时使用什么机制:实时消息、电子邮件或者是其他钉钉、微信等工具。

prometheus --> 触发阈值 --> 超出持续时间 --> alertmanager --> 分组|抑制|静默 --> 媒介类型 --> 邮件|钉钉|微信等

功能

  • 分组(group):将类似性质的告警合并为单个通知,比如网络通知、主机通知、服务通知。
  • 静默(silences):是一种简单的特定时间静默的机制,例如:服务器要升级维护可以先设置这个时间段告警静默
  • 抑制(inhibition):当告警发出后,停止重复发送由此告警引发的其他告警即合并一个故障引起多个报警时间,可以消除冗余告警

下载地址:https://prometheus.io/download/ ,下载相应版本,安装到服务器上官网提供的是二进制版,解压就能用,不需要编译。【版本也可使用文章末尾的资料包】
根据环境下载对应的版本,x86环境的话用这个alertmanager-0.24.0.linux-amd64.tar.gz
image.png

2. alertmanager安装

## 1. 新建目录 [root@VM-24-17-centos opt]# mkdir /opt/jiankong/jiankongSoft -p [root@VM-24-17-centos opt]# cd /opt/jiankong/jiankongSoft ## 2. 上传压缩包 并解压 [root@server ~]# tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz -C /opt/jiankong ## 3. 重命名alertmanager文件名 [root@localhost jiankongSoft]# cd /opt/jiankong [root@localhost jiankong]# mv alertmanager-0.24.0.linux-amd64 alertmanager-0.24.0

3. alertmanager启动

## 5. alertmanager [root@localhost alertmanager-0.24.0]# cd /opt/jiankong/alertmanager-0.24.0 ## 6. 启动服务 [root@localhost alertmanager-0.24.0]# nohup ./alertmanager > ./alertmanager.log 2>&1 & ## 查看端口默认是9093 [root@server ~]# lsof -i:9093 ## 通过浏览器访问http://被监控端IP:9093 查看地址 http://192.168.145.161:9093

4. alertmanager注册服务(可选)

## 1.编辑服务自启动文件 [root@master1 ~]#vim /lib/systemd/system/alertmanager.service ## 提示 这里用的是9091端口 [root@master1 ~]#cat /lib/systemd/system/alertmanager.service [Unit] Description=Alertmanager After=network.target [Service] Type=simple User=root Group=root WorkingDirectory=/opt/jiankong/alertmanager-0.24.0 ExecStart=/opt/jiankong/alertmanager-0.24.0/alertmanager --web.listen-address="0.0.0.0:9093" Restart=on-failure [Install] WantedBy=multi-user.target ## 2. 更新systemd服务信息 [root@master1 ~]# systemctl daemon-reload ## 3. 服务开机自动启动 [root@master1 ~]# systemctl enable --now alertmanager.service ## 4.启动服务 [root@master1 ~]# systemctl start alertmanager ## 其他的备用命令 [root@master1 ~]# systemctl enable alertmanager.service [root@master1 ~]# systemctl stop alertmanager.service [root@master1 ~]# systemctl restart alertmanager.service [root@master1 ~]# systemctl status alertmanager.service [root@master1 ~]# journalctl -u alertmanager -f -n 500

三、prometheus配置告警配置

## 1. 进入到prometheus目录 [root@localhost prometheus-2.40.5]# cd /opt/jiankong/prometheus-2.40.5 ## 2. 编译prometheus.yml配置文件 [root@VM-24-17-centos prometheus-2.35.0]# vim prometheus.yml ##yml格式 注意文件对齐方式 # my global config 2.1. 仅以将值修改为60s global: scrape_interval: 60s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration 2.2. 添加告警平台的地址 alerting: alertmanagers: - static_configs: - targets: - 127.0.0.1:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. # 2.3. 配置读取规则的路径 rule_files: - "rules/*.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ["localhost:9091"] - job_name: "dm_dem_node" metrics_path: "/dem/metrics" static_configs: - targets: ["192.168.145.162:8080"] - job_name: "dm_node_single" static_configs: - targets: ["192.168.145.162:9100"] labels: origin_prometheus: '单机测试' - job_name: "dm_db_single" metrics_path: "/prometheus" static_configs: - targets: ["192.168.145.162:9200"] labels: cluster_name: '单机测试'

image.png

四、配置prometheus的rule文件

## 3。 配置rules规则 [root@VM-24-17-centos prometheus-2.35.0]# mkdir rules ## 4. 新建custom_test.yml规则文件,内容如下,也可去文末资料包中直接导入.(按需调整) [root@VM-24-17-centos prometheus-2.35.0]# vim custom_test.yml
groups: - name: 主机状态-监控告警 rules: - alert: 主机失联 expr: up == 0 for: 15s labels: severity: 严重 annotations: description: "主机:{{ $labels.instance }} 服务宕机" summary: "主机:{{ $labels.instance }}:服务器超过1m无法连接" - alert: 集群发生切换 expr: dmdbms_switching_occurs == 0 for: 15s labels: severity: 严重 annotations: description: "主机:{{ $labels.instance }} 数据库模式切换" summary: "主机:{{ $labels.instance }}:数据库发生模式切换,疑似发生集群切换请核实" - alert: 数据库状态转换 expr: dmdbms_db_status_occurs == 0 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 数据库状态转换" summary: "主机:{{ $labels.instance }}:数据库OPEN状态变化,疑似发生状态转换请核实" - alert: 数据库连接数过高 expr: dmdbms_session_percentage*100 > 80 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 数据库连接数过高" summary: "主机:{{ $labels.instance }}:数据库的连接数超过80%,请确认是否正常" - alert: 数据库存在锁等待 expr: dmdbms_dead_lock_num_info >0 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 数据库存在锁等待" summary: "主机:{{ $labels.instance }}:数据库存在锁等待,请确认是否正常" - alert: cpu使用率过高 expr: 100 * (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) > 80 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} cpu使用率过高" summary: "主机:{{ $labels.instance }}:cpu使用率过高,超过80%" - alert: 内存使用率过高 expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100 > 80 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 内存使用率过高" summary: "主机:{{ $labels.instance }}:内存使用率过高,超过80%" - alert: 数据库内存池过高 expr: dmdbms_memory_curr_pool_info/dmdbms_memory_total_pool_info*100 > 0.32 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 内存池使用率过高" summary: "主机:{{ $labels.instance }}:内存池使用率过高,超过80%" - alert: 表空间使用率超过80% expr: ((dmdbms_tablespace_size_total_info - dmdbms_tablespace_size_free_info)/dmdbms_tablespace_size_total_info)* 100 > 80 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 存在表空间使用率超过80%" summary: "主机:{{ $labels.instance }}: 存在表空间使用率超过80%,请核实" - alert: 磁盘分区使用率超过80% expr: (node_filesystem_size_bytes{fstype=~"ext.*|xfs|nfs",mountpoint !~".*(pod|docker).*"}-node_filesystem_free_bytes{fstype=~"ext.*|xfs|nfs",mountpoint !~".*(pod|docker).*"}) *100/(node_filesystem_avail_bytes {fstype=~"ext.*|xfs|nfs",mountpoint !~".*(pod|docker).*"}+(node_filesystem_size_bytes{fstype=~"ext.*|xfs|nfs",mountpoint !~".*(pod|docker).*"}-node_filesystem_free_bytes{fstype=~"ext.*|xfs|nfs",mountpoint !~".*(pod|docker).*"})) >80 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 磁盘分区使用率超过80%" summary: "主机:{{ $labels.instance }}: 磁盘分区使用率超过80%,请核实" - alert: 数据库存在事务等待 expr: dmdbms_trx_info >0 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 数据库存在事务等待" summary: "主机:{{ $labels.instance }}:数据库存在事务等待,请确认是否正常" - alert: 定时备份错误数 expr: dmdbms_joblog_error_alarm == 0 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 数据库定时备份发生错误" summary: "主机:{{ $labels.instance }}:数据库定时备份发生错误,请确认是否正常" - alert: 会话超时数 expr: dmdbms_waiting_session >= 1 for: 15s labels: severity: 警告 annotations: description: "主机:{{ $labels.instance }} 数据库会话超时数" summary: "主机:{{ $labels.instance }}:数据库会话超时数,请确认是否正常"
## 5.修改完成以后进行配置文件校验,避免因为空格等问题导致出错 [root@localhost prometheus-2.40.5]# ./promtool check config prometheus.yml Checking prometheus.yml SUCCESS: 1 rule files found SUCCESS: prometheus.yml is valid prometheus config file syntax Checking rules/custom_test.yml SUCCESS: 13 rules found

五、重启prometheus并进行连接校验

## 6.重启prometheus [root@localhost prometheus-2.40.5]# ps -ef|grep prometheus root 30944 1 0 13:09 ? 00:00:06 /opt/jiankong/prometheus-2.40.5/prometheus [root@localhost prometheus-2.40.5]# kill -9 30944 [root@localhost prometheus-2.40.5]# nohup ./prometheus --config.file="prometheus.yml" --web.listen-address="0.0.0.0:9091" > ./prometheus.log 2>&1 & ## 5.访问prometheus,查看是否数据拉取成功 http://101.42.236.144:9091/

image.png

六、(邮件告警)alertmanager配置邮件告警

## 1. alertmanager [root@localhost alertmanager-0.24.0]# cd /opt/jiankong/alertmanager-0.24.0 ## 2. 修改配置文件alertmanager.yml [root@localhost alertmanager-0.24.0]# vim alertmanager.yml global: #smtp与163邮箱一致。查看文末其他163邮箱开启POP配置的申请即可 smtp_smarthost: 'smtp.163.com:25' smtp_from: '1393592xxxx@163.com' smtp_auth_username: '1393592xxxx@163.com' smtp_auth_password: 'YONUZCAGJHIUYXXX' smtp_require_tls: false templates: - './template/alertmanager-*.tmpl' # 读取自定义通知模板定义的文件。 route: group_by: ['alertname'] group_wait: 1m # 一个新分组等待发送报警的时间 group_interval: 15m #已经发送成功了报警的组,有新增alert加入组时下一次发送报警的时间 repeat_interval: 1h # 报警无变化情况下,重复发送告警时间。默认1h #resolve_timeout: 5m # 该时间内未收到报警则视为问题解决 receiver: 'email' receivers: - name: 'email' email_configs: - to: 'xxx@163.com' #配置邮件发送给谁,多人的话逗号分隔 html: '{{ template "email.to.html" . }}' # HTML模板文件正文 send_resolved: true inhibit_rules: #告警抑制 - source_match: severity: '严重' target_match: severity: '警告' equal: ['alertname', 'job', 'instance']

七、(邮件告警)alertmanager配置邮件模板

## 3。 新建template目录 [root@VM-24-17-centos alertmanager-0.24.0# mkdir template ## 4. 新建alertmanager-email.tmpl规则文件,内容如下,也可去文末资料包中直接导入. [root@VM-24-17-centos alertmanager-0.24.0# cd template [root@VM-24-17-centos template]# vim alertmanager-email.tmpl
{{ define "email.to.html" }} {{- if gt (len .Alerts.Firing) 0 -}} {{- range $index, $alert := .Alerts -}} ========= &lt;span style=color:red;font-size:36px;font-weight:bold;> 监控告警 &lt;/span>=========&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警程序:&lt;/span> Alertmanager &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警类型:&lt;/span> {{ $alert.Labels.alertname }} &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警级别:&lt;/span> {{ $alert.Labels.severity }} 级 &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 故障主机:&lt;/span> {{ $alert.Labels.instance }} {{ $alert.Labels.device }} &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警主题:&lt;/span> {{ .Annotations.summary }} &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警详情:&lt;/span> {{ $alert.Annotations.message }}{{ $alert.Annotations.description}} &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 主机标签:&lt;/span> {{ range .Labels.SortedPairs }} &lt;br> [{{ .Name }}: {{ .Value | html }} ]{{ end }}&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 故障时间:&lt;/span> {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}&lt;br> ========= = end = =========&lt;br> &lt;br> &lt;br> &lt;br> &lt;br> &lt;div> &lt;div style=margin:40px> &lt;p style=font-size:20px>运维部门&lt;/p> &lt;p style=color:red;font-size:14px> (这是一封自动发送的邮件,请勿回复。) &lt;/p> &lt;/div> <div align=right style="margin:40px;border-top:solid 1px gray" id=bottomTime> <p style=margin-right:20px> 达梦运维监控平台 </p> <label style=margin-right:20px> {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 " }}<br> </label> </div> &lt;/div> {{- end }} {{- end }} {{- if gt (len .Alerts.Resolved) 0 -}} {{- range $index, $alert := .Alerts -}} ========= &lt;span style=color:#00FF00;font-size:24px;font-weight:bold;> 告警恢复 &lt;/span>=========&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警程序:&lt;/span> Alertmanager &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警主题:&lt;/span> {{ $alert.Annotations.summary }}&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警主机:&lt;/span> {{ .Labels.instance }} &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警类型:&lt;/span> {{ .Labels.alertname }}&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警级别:&lt;/span> {{ $alert.Labels.severity }} 级 &lt;br> &lt;span style=font-size:20px;font-weight:bold;> 告警详情:&lt;/span> {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 故障时间:&lt;/span> {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}&lt;br> &lt;span style=font-size:20px;font-weight:bold;> 恢复时间:&lt;/span> {{ ($alert.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}&lt;br> ========= = end = ========= &lt;br> &lt;br> &lt;br> &lt;br> &lt;div> &lt;div style=margin:40px> &lt;p style=font-size:20px>运维部门&lt;/p> &lt;p style=color:red;font-size:14px> (这是一封自动发送的邮件,请勿回复。) &lt;/p> &lt;/div> <div align=right style="margin:40px;border-top:solid 1px gray" id=bottomTime> <p style=margin-right:20px> 达梦运维监控平台 </p> <label style=margin-right:20px> {{ ($alert.StartsAt.Add 28800e9).Format "2006-01-02 " }}<br> </label> </div> &lt;/div> {{- end }} {{- end }} {{- end }} {{ define "__subject" }} {{- range $index, $alert := .Alerts -}}{{ $test := "DM监控告警通知:"}}{{$test}}{{$alert.Annotations.message }}{{$alert.Annotations.description}}{{($alert.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} {{- end }} {{- end }}

八、(邮件告警)重启altermanager

## 5.重启alertmanager [root@localhost alertmanager-0.24.0]# ps -ef|grep alertmanager root 32651 29851 0 20:45 pts/1 00:00:02 ./alertmanager [root@localhost alertmanager-0.24.0]# kill -9 32651 [root@localhost alertmanager-0.24.0]# nohup ./alertmanager > ./alertmanager.log 2>&1 & ## 通过浏览器访问http://被监控端IP:9093 查看地址 http://192.168.145.161:9093

九、(邮件告警)测试告警

#@ 1. 手动利用脚本触发测试告警 [root@localhost alertmanager-0.24.0]# vim alerts_message.sh #!/usr/bin/env bash alerts1='[ { "labels": { "alertname": "DiskRunningFull1", "dev": "sda11", "instance": "example11" }, "annotations": { "info": "The disk sda1 is running full", "summary": "please check the instance example1" } } ]' curl -XPOST -d"$alerts1" http://localhost:9093/api/v1/alerts ## 2.赋予权限 [root@localhost alertmanager-0.24.0]# chmod 755 alerts_message.sh ## 3.执行脚本 [root@localhost alertmanager-0.24.0]# ./alerts_message.sh {"status":"success"} ## 4.测试alertmanager的状态

image.png
等待一分钟左右就会发送到邮箱
image.png

十、(短信告警)alertmanager配置短信告警

短信告警其实就是将信息转发到指定的接口,然后接口进行处理。现场用的短信。具体的接口实现可以参照源码sms_notification.zip(在文末资料包中)

## 1. alertmanager [root@localhost alertmanager-0.24.0]# cd /opt/jiankong/alertmanager-0.24.0 ## 2. 修改配置文件alertmanager.yml [root@localhost alertmanager-0.24.0]# vim alertmanager.yml global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 1m # 一个新分组等待发送报警的时间 group_interval: 15m #已经发送成功了报警的组,有新增alert加入组时下一次发送报警的时间 repeat_interval: 1h # 报警无变化情况下,重复发送告警时间。默认1h receiver: 'webhook' receivers: - name: 'webhook' webhook_configs: - url: 'http://127.0.0.1:9400/alertMessage/receive2' inhibit_rules: - source_match: severity: '严重' target_match: severity: '警告' equal: ['alertname', 'job', 'instance']

十一、(短信告警)短信接口的代码实现

package com.dameng.sms_notification.controller; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.hutool.log.StaticLog; import com.dameng.sms_notification.util.CustomUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.*; import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("alertMessage") @Component public class ReceiveAlertMessageController { @Value("${mobile.personnel}") private String personnels; private String smsUrl = "http://10.23.153.11/http/v1/formSend"; @GetMapping("receive1") public String receiveMsg1() { System.out.println(personnels); //获取list的数据 List<String> personnelsList = CustomUtil.convertList(personnels); Map<String, Object> result = new HashMap<>(); result.put("msg", "报警失败"); result.put("code", 0); String testStr1 = "{\"receiver\":\"webhook\",\"status\":\"firing\",\"alerts\":[{\"status\":\"firing\",\"labels\":{\"alertname\":\"内存使用率过高\",\"instance\":\"120.53.103.235:9100\",\"job\":\"dm_node_agent\",\"severity\":\"警告\"},\"annotations\":{\"description\":\"主机:120.53.103.235:9100 内存使用率过高\",\"summary\":\"主机:120.53.103.235:9100:内存使用率过高,超过80%\"},\"startsAt\":\"2022-06-11T15:33:09.089Z\",\"endsAt\":\"0001-01-01T00:00:00Z\",\"generatorURL\":\"http://VM-24-17-centos:9090/graph?g0.expr=%281+-+%28node_memory_MemAvailable_bytes+%2F+%28node_memory_MemTotal_bytes%29%29%29+%2A+100+%3E+80\\u0026g0.tab=1\",\"fingerprint\":\"d159c71a32560544\"}],\"groupLabels\":{\"alertname\":\"内存使用率过高\"},\"commonLabels\":{\"alertname\":\"内存使用率过高\",\"instance\":\"120.53.103.235:9100\",\"job\":\"dm_node_agent\",\"severity\":\"警告\"},\"commonAnnotations\":{\"description\":\"主机:120.53.103.235:9100 内存使用率过高\",\"summary\":\"主机:120.53.103.235:9100:内存使用率过高,超过80%\"},\"externalURL\":\"http://VM-24-17-centos:9093\",\"version\":\"4\",\"groupKey\":\"{}:{alertname=\\\"内存使用率过高\\\"}\",\"truncatedAlerts\":0}\n"; JSONObject jsonObject = JSONUtil.parseObj(testStr); /* String status = jsonObject.getStr("status"); JSONObject commonAnnotations = jsonObject.getJSONObject("commonAnnotations"); String description = commonAnnotations.getStr("description"); */ JSONArray alertsJsonArray = jsonObject.getJSONArray("alerts"); for (int i = 0; i < alertsJsonArray.size(); i++) { JSONObject alertsjsonObject = alertsJsonArray.getJSONObject(i); //获取告警的类型状态 String status = alertsjsonObject.getStr("status"); //firing //获取告警描述 JSONObject labelList = alertsjsonObject.getJSONObject("labels"); String alertname = labelList.getStr("alertname");//集群发生切换 String instance = labelList.getStr("instance");//188.131.177.169:9200 String severity = labelList.getStr("severity");//严重 //告警具体内容 JSONObject annotationsList = alertsjsonObject.getJSONObject("annotations"); // String description = annotationsList.getStr("description"); String summary = annotationsList.getStr("summary"); if(status.equals("firing")){ //修改时间 Date startsAt = alertsjsonObject.getDate("startsAt",DateUtil.parse( DateUtil.today(), "yyyy-MM-dd")); //拼接字符串 String firingSendStr = summary + ",故障时间:" + DateUtil.format(startsAt, "yyyy-MM-dd HH:mm:ss"); //获取手机号 List<String> mobileList = CustomUtil.convertList(personnels); for (String mobileStr : mobileList) { if(StrUtil.isNotBlank(mobileStr)){ HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("mobileTo", mobileStr); paramMap.put("sendMsg", firingSendStr); paramMap.put("userName", "ozab"); paramMap.put("pwd", "D4F971D22B7E4C30F85036D466B49B5A"); paramMap.put("organizationId", "000025"); paramMap.put("sysId", "162"); paramMap.put("messageType", "162"); String result3= HttpUtil.get(smsUrl, paramMap); System.out.println(result3); /* //调用发送短信接口 StaticLog.info("发送人:{},发送内容:{}",mobileStr,firingSendStr); JSONObject entries = new JSONObject(); entries.set("PhoneNumberSet", new String[]{mobileStr}); entries.set("SmsSdkAppId","1400692305"); entries.set("SignName", "学习分享个人网"); entries.set("TemplateId", "1436191"); entries.set("TemplateParamSet", new String[]{"1234"}); // 设置请求头 Map<String, String > heads = new HashMap<>(); heads.put("Content-Type", "application/json;charset=UTF-8"); String result2 = HttpRequest.post("sms.tencentcloudapi.com") .headerMap(heads, false) .body(entries.toJSONString(1)) .execute().body(); System.out.println(result2);*/ } } }else{ //"status": "resolved", //恢复时间 Date startsAt = alertsjsonObject.getDate("endsAt",DateUtil.parse( DateUtil.today(), "yyyy-MM-dd")); //拼接字符串 String resolvedSendStr = summary + ",故障恢复时间:" + DateUtil.format(startsAt, "yyyy-MM-dd HH:mm:ss"); //获取手机号 List<String> mobileList = CustomUtil.convertList(personnels); for (String mobileStr : mobileList) { if(StrUtil.isNotBlank(mobileStr)){ //调用发送短信接口 //添加到日志 StaticLog.info("发送人:{},发送内容:{}",mobileStr,resolvedSendStr); HashMap<String, Object> paramMap = new HashMap<>(); paramMap.put("mobileTo", mobileStr); paramMap.put("sendMsg", resolvedSendStr); paramMap.put("userName", "ozab"); paramMap.put("pwd", "D4F971D22B7E4C30F85036D466B49B5A"); paramMap.put("organizationId", "000025"); paramMap.put("sysId", "162"); paramMap.put("messageType", "162"); String result3= HttpUtil.get(smsUrl, paramMap); System.out.println(result3); } } } } //获取告警的警告时间 JSONObject alertList = jsonObject.getJSONArray("alerts").getJSONObject(0); return "success"; } }

其他

163邮箱开启POP配置

image.png

开启 POP3/SMTP服务
image.png

image.png

image.png

资料包

链接:https://pan.baidu.com/s/1lo6AynZBR5JdRZwY_1arbA?pwd=o178 提取码:o178

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服