pinpoint2.3.3监控告警信息飞书推送

目录

一、相关说明

二、部署pinpoint2.3.3

三、 部署监控告警信息飞书推送

3.1更新pinpoint MYSQL的alarm_rule表

3.2 部署slack-receiver

3.3 pinpoint-web,pinpoint-batch配置

3.4 告警消息推送配置


一、相关说明

1.1 Slack-receiver:

GitHub - doll6777/slack-receiver

1.2 飞书自定义机器人说明(采用的是发送消息卡片):

开发文档 - 飞书开放平台

1.3 pinpoint官方说明:

pinpoint/alarm.md at 2.3.x · pinpoint-apm/pinpoint · GitHub

二、部署pinpoint2.3.3

2.1 pinpoint-web和pinpoint-collector部署可参考网上其他大佬:

https://xdong.blog.csdn.net/article/details/123180298

2.2 pinpoint-batch带邮件告警通知的部署可看我另篇:

https://blog.csdn.net/zouzou_888/article/details/130414531

三、 部署监控告警信息飞书推送

3.1更新pinpoint MYSQL的alarm_rule表

在pinpoint MYSQL的alarm_rule表中添加webhook_send列

ALTER TABLE alarm_rule ADD COLUMN webhook_send CHAR(1)DEFAULT NULL;

3.2 部署slack-receiver

Slack-receiver项目环境要求:

Java 1.8

Spring Boot

1)从 GitHub 上将 slack-receiver项目的代码克隆到本地

git clone https://github.com/doll6777/slack-receiver.git

2)修改application.properties配置 

文件目录:slack-receiver/src/main/resources/application.properties

配置信息:

#服务端口

server.port=8085

#飞书的webhook地址

slack.incoming.webhook.url=飞书webhook-url

3)改写SlackNotifier.java实现飞书消息推送 

文件目录:slack-receiver/src/main/java/com/webhook/receiver/slack/sender/SlackNotifier.java

package com.webhook.receiver.slack.sender;

import com.webhook.receiver.slack.vo.WebhookPayload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class SlackNotifier implements Notifier {
    
    private final Logger logger = LoggerFactory.getLogger(SlackNotifier.class.getName());
    private final RestTemplate restTemplate;
    private final String incomingWebhookUrl;
    
    @Autowired
    public SlackNotifier(RestTemplate restTemplate, @Value("${slack.incoming.webhook.url}") final String incomingWebhookUrl) {
        this.restTemplate = restTemplate;
        this.incomingWebhookUrl = incomingWebhookUrl;
    }
    
    public boolean send(WebhookPayload webhookPayload) {

        Date currentDate = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
        String formattedDate = dateFormat.format(currentDate);
        
        //  拼接pinpoint当前应用服务的url地址
        String pinpoint_url = webhookPayload.getPinpointUrl()+"/main/"+webhookPayload.getApplicationId()+"@SPRING_BOOT/5m/" + formattedDate;

       //  推送给飞书自定义机器人的消息卡片json数据
        String jsonMessage = "{\"msg_type\":\"interactive\",\"card\":{\"elements\":[{\"tag\":\"div\",\"text\":{\"content\":\"" 
                  + "**["+webhookPayload.getApplicationId()+"]**"
                  + " 应用服务:" + webhookPayload.getApplicationId()
                  + " 告警规则:" + webhookPayload.getChecker().getName()
                  + " 告警阈值:" + webhookPayload.getThreshold().toString()
                  + " 告警值(过去5分钟内):" + webhookPayload.getChecker().getDetectedValueString()
                  + "\",\"tag\":\"lark_md\"}},{\"actions\":[{\"tag\":\"button\",\"text\":{\"content\":\""
                  + "pinpoint链接\",\"tag\":\"lark_md\"},\"url\":\""
                  + pinpoint_url + "\",\"type\":\"default\",\"value\":{}}],\"tag\":\"action\"}],\"header\":{\"title\":{\"content\":\""
                  + webhookPayload.getNotes() + "\",\"tag\":\"plain_text\"}}}}";

        try { 

           URL obj = new URL(incomingWebhookUrl);
           HttpURLConnection con = (HttpURLConnection) obj.openConnection();

           // 设置 POST 请求头信息
           con.setRequestMethod("POST");
           con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

          // 将请求体写入 HttpURLConnection 对象中
           con.setDoOutput(true);
           DataOutputStream wr = new DataOutputStream(con.getOutputStream());
           wr.write(jsonMessage.getBytes("UTF-8"));
           wr.flush();
           wr.close();
   
           int responseCode = con.getResponseCode();
           System.out.println("Response Code : " + responseCode);

           // 获取响应结果
           BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
           String inputLine;
           StringBuffer response = new StringBuffer();
   
           while ((inputLine = in.readLine()) != null) {
               response.append(inputLine);
           }
           in.close();

           // 打印响应结果
           //logger.info("Sent slack message to {}", incomingWebhookUrl); 
           logger.info("Response Body : " + response.toString());
        } catch (IOException e) {
            logger.error(e.getMessage());
            return false;
        } catch (Exception e) {
            logger.error(e.getMessage());
            return false;
        }

        return true;
    }
}

 4)项目打包

cd slack-receiver

./mvnw package

或者(查看编译过程)

./mvnw -X package

在编译过程中,会出现测试无法通过,需要注释掉部分test的代码

目录:slack-receiver/src/test/java/com/webhook/receiver/slack/sender/SlackNotifierTest.java

将下面的代码进行注释,然后再进行编译

//    @Test

//    void sendSuccess() {

//        when(restTemplate.postForObject(any(URI.class), any(SlackPayload.class), eq(String.class))).thenReturn("");

//        slackNotifier = new SlackNotifier(restTemplate, "http://webhook.send.com");

   

//        WebhookPayload payload = new WebhookPayload("pinpointUrl", "release", "applicationId", "serviceType", new UserGroup("userGroupId", new ArrayList<>()), new LongValueAlarmChecker(1L), "%", 1, "", 1);

//        boolean result = slackNotifier.send(payload);

//        Assertions.assertTrue(result);

//    }

 编译成功后,在target目录找到对应的jar包:slack-receiver-0.0.1-SNAPSHOT.jar

5) 启动slack-receiver服务

在需部署的jar包目录新增logs和conf目录

在conf目录新增本地的配置文件:slack.properties

新增配置文件后,在启动时可引用该配置文件中的配置,灵活配置服务的端口和webhook地址

配置文件内容:

#服务端口

server.port=8085

#webhook地址

#slack.incoming.webhook.url=飞书webhook-url

#启动脚本(在jar包的目录下):

nohup java -Dlog.dir=/opt/slack-receiver/logs/ -Dspring.config.additional-location=/opt/slack-receiver/conf/slack.properties -jar slack-receiver-0.0.1-SNAPSHOT.jar >/opt/slack-receiver/logs/slack-receiver.log 2>&1 &

#停服务脚本:

ps -ef | grep slack-receiver | grep -v grep | awk '{print $2}' | xargs kill -9

启动成功后slack-receiver调用链接:

http://localhost:8085/api/send/slack

返回code说明:

description

code

send success

200

send fail

500

wrong type

400

3.3 pinpoint-web,pinpoint-batch配置

pinpoint-web配置文件新增配置:

webhook.enable=true

pinpoint-batch配置文件新增配置:

webhook.enable=true

 

3.4 告警消息推送配置

1) 配置每个application的slack-receiver项目地址,用于消息推送。目前一个slack-receiver项目对应一个飞书自定义机器人地址,可部署多个项目来对应多个自定义机器人webhook地址。

2)配置监控告警,Type选项可以选项ALL,也可单独新增一个webhook告警项,配置时需勾选对应的webhook地址,Notes内容为飞书的标题。 

 3)飞书消息推送效果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值