DingTalkNotifier.java
package com.notifier;
import java.util.HashMap;
import java.util.Map;
import org.springframework.context.expression.MapAccessor;
import org.springframework.expression.expression;
import org.springframework.expression.ParserContext;
import org.springframework.expression.spel.standard.SpelexpressionParser;
import org.springframework.expression.spel.support.StandardevaluationContext;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
import de.codecentric.boot.admin.server.domain.entities.Instance;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
import reactor.core.publisher.Mono;
public class DingTalkNotifier extends AbstractStatusChangeNotifier {
private static final String DEFAULT_MESSAGE = "*#{instance.registration.name}* (#{instance.id}) is *#{event.statusInfo.status}**";
private final SpelexpressionParser parser = new SpelexpressionParser();
private RestTemplate restTemplate = new RestTemplate();
private String webhookToken;
private String atMobiles;
private String msgtype = "markdown";
private String title = "服务告警";
private expression message;
public DingTalkNotifier(InstanceRepository repository) {
super(repository);
this.message = parser.parseexpression(DEFAULT_MESSAGE, ParserContext.TEMPLATE_expression);
}
@Override
protected Mono donotify(InstanceEvent event, Instance instance) {
return Mono.fromRunnable(() -> restTemplate.postForEntity(webhookToken, createMessage(event, instance),Void.class));
}
private HttpEntity
DingTalkNotifierConfiguration.java
package com.notifier;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import de.codecentric.boot.admin.server.config.AdminServerNotifierAutoConfiguration.CompositeNotifierConfiguration;
import de.codecentric.boot.admin.server.config.AdminServerNotifierAutoConfiguration.NotifierTriggerConfiguration;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
@Configuration
@ConditionalOnProperty(
prefix = "spring.boot.admin.notify.dingtalk",
name = {"webhook-token"}
)
@AutoConfigureBefore({NotifierTriggerConfiguration.class, CompositeNotifierConfiguration.class})
public class DingTalkNotifierConfiguration {
@Bean
@ConditionalOnMissingBean
@ConfigurationProperties(prefix = "spring.boot.admin.notify.dingtalk")
public DingTalkNotifier dingTalkNotifier(InstanceRepository repository) {
return new DingTalkNotifier(repository);
}
}
application.yml
spring:
boot:
admin:
notify:
dingtalk:
enabled: true
webhook-token: https://oapi.dingtalk.com/robot/send?access_token=xxxxx
启动完成钉钉消息推送了。
restarts.sh
#!/bin/bash
echo 当前工作目录如下
pwd
echo 关闭正在运行的服务
ps -ef|grep 'java'|grep 'spring'|grep 'springboot_admin'|grep -v 'grep'|awk '{print $2}'|xargs -tI {} kill -9 {}
echo 备份日志文件
logbase=/data/log/springboot_admin
echo 启动服务-后台运行
mkdir -p $logbase
touch $logbase/spring.log
nohup java -Xms1024m -Xmx1024m -DLOG_PATH=$logbase -jar springboot_admin-0.0.1-SNAPSHOT.jar 1>/dev/null 2>&1 &
#结束动态日志输出(60秒之后)
sleep 60 && ps -ef|grep 'tail'|grep 'springboot_admin'|grep -v 'grep'|awk '{print $2}'|xargs -tI {} kill -9 {} &
echo 动态输出新服务日志
tail -f $logbase/spring.log
echo 滚动日志已关闭
如果要修改端口和钉钉的地址,请修改
nohup java -Xms1024m -Xmx1024m -DLOG_PATH=$logbase -jar springboot_admin-0.0.1-SNAPSHOT.jar 1>/dev/null 2>&1 & 为: nohup java -Xms1024m -Xmx1024m -DLOG_PATH=$logbase -jar springboot_admin-0.0.1-SNAPSHOT.jar --server.port=9090 --spring.boot.admin.notify.dingtalk.webhook-url='钉钉Webhook 全连接' 1>/dev/null 2>&1 &



