springboot项目使用kafka+logstash+opensearch实现统一日志

springboot项目使用log4j2 日志框架

1、log4j-spring.xml文件

<appenders>
<!--统一日志-登录日志-->
<Kafka name="InOutLog" topic="unified_login">
    <RegexFilter regex=".*Login.*" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout charset="UTF-8" pattern="%msg"/>
    <Property name="bootstrap.servers">127.0.0.1:9092</Property>
</Kafka>

<!-- 异步 Appender -->
<Async name="asyncKafka">
    <AppenderRef ref="InOutLog"/>
</Async>
</appenders>
<loggers>

    <root level="info">
        <AppenderRef ref="asyncKafka"/>
    </root>
</loggers>

2、JAVA代码发送日志

@GetMapping("/sendlog")
public void test(){
    System.out.println("开始发送");
    UnionLogDto unionLogDto = new UnionLogDto();
    unionLogDto.setDescription("OA单点");
    unionLogDto.setActionType(ActionType.Create);
    unionLogDto.setTag(new String[]{"LoginTag","123456"});
    log.info(JSON.toJSONString(unionLogDto));
    System.out.println("发送成功");
}

3、logstash.xml文件

使用ruby 插件对json中的数组进行特殊处理

input{
      kafka{
        bootstrap_servers => ["127.0.0.1:9092"]
        client_id => "test"
        group_id => "test"
        auto_offset_reset => "latest" 
        consumer_threads => 5
        decorate_events => true 
        topics => ["unified_login"] 
        codec => "json"
      }
}

filter {

  ruby {
    code => "
      event.set('tag.tag0', event.get('[tag]').to_a[0])
      event.set('tag.tag1', event.get('[tag]').to_a[1])
    "
  }
  mutate {
    
    remove_field => ["tag"]
  }
}

output {
  opensearch {
    hosts => ["http://127.0.0.1:9211","http://127.0.0.1:9212","http://127.0.0.1:9213"]
    index => "login-test"
    user => "admin"
    password => "XXXXXXXXX"
    action => "create"
  }
}

4、opensearch  dashboard 如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值