前言
本文对于各个方案优缺点的评判基于以下方针:
-
任何开源组件,尤其是第三方个人开发或很久没有更新的组件,在使用前都需要经过完备的功能和性能测试。
-
方案技术栈应与公司技术栈保持一致,有利于日后的维护和扩展。
-
在扩展性方面,有些方案虽然十分成熟,但是扩展的成本较高;相对的有些方案虽然非常简陋,但是扩展的成本较低。在非紧急需求的情况下后者长期更加有利。
方案一:自研组件
原理图
伪代码
public class Alerter {
private final Set<String> alertLevels = Set.of("error", "fatal");
public void consume(String message) {
LogInfo logInfo = LogInfo.getInstanceFromElkKafkaMessage(message);
if (alertLevels.contains(logInfo.level.toLowerCase())) {
send(DingTalkMessage.getInstanceFromLogInfo(logInfo));
persist(logInfo);
}
}
private void send(DingTalkM