Bootstrap

基于ELK的异常日志钉钉告警方案整理

前言

本文对于各个方案优缺点的评判基于以下方针:

  1. 任何开源组件,尤其是第三方个人开发或很久没有更新的组件,在使用前都需要经过完备的功能和性能测试。

  2. 方案技术栈应与公司技术栈保持一致,有利于日后的维护和扩展。

  3. 在扩展性方面,有些方案虽然十分成熟,但是扩展的成本较高;相对的有些方案虽然非常简陋,但是扩展的成本较低。在非紧急需求的情况下后者长期更加有利。

方案一:自研组件

原理图

伪代码

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
;