博客 / 詳情

返回

logstash4j-用於日誌的輸入、轉換處理、輸出, java 開發者自己的 logstash

項目簡介

用於日誌的輸入、轉換處理、輸出, java 開發者自己的 logstash

特性

  • input
  • output
  • filter
  • metric

開源地址

logstash4j

快速開始

需要

jdk1.8+

maven 3.x+

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>logstash4j-core</artifactId>
    <version>0.9.0</version>
</dependency>

例子

啓動程序

import com.github.houbb.logstash4j.core.api.ILogstashConfigClassName;
import com.github.houbb.logstash4j.core.api.ILogstashManageConfig;
import com.github.houbb.logstash4j.core.bs.LogstashManageCoreBs;
import com.github.houbb.logstash4j.core.support.config.LogstashConfigClassName;

import java.util.*;

public class LogstashManageCoreBsTest {

    public static void main(String[] args) {
        ILogstashManageConfig config = new ILogstashManageConfig() {
            @Override
            public List<ILogstashConfigClassName> getInputConfigList() {
                List<ILogstashConfigClassName> list = new ArrayList<>();
                LogstashConfigClassName logstashConfigClassName = new LogstashConfigClassName(new HashMap<String, Object>());
                logstashConfigClassName.setClassName("com.github.houbb.logstash4j.plugins.input.StdIn");
                list.add(logstashConfigClassName);
                return list;
            }

            @Override
            public List<ILogstashConfigClassName> getFilterConfigList() {
                //1. add
                List<ILogstashConfigClassName> list = new ArrayList<>();
                Map<String, Object> configMap = new HashMap<>();
                configMap.put("addField1", "value1");
                configMap.put("addField2", "value2");

                LogstashConfigClassName logstashConfigClassName = new LogstashConfigClassName(configMap);
                logstashConfigClassName.setClassName("com.github.houbb.logstash4j.plugins.filter.Add");
                list.add(logstashConfigClassName);
                return list;
            }

            @Override
            public List<ILogstashConfigClassName> getOutConfigList() {
                List<ILogstashConfigClassName> list = new ArrayList<>();
                LogstashConfigClassName logstashConfigClassName = new LogstashConfigClassName(new HashMap<String, Object>());
                logstashConfigClassName.setClassName("com.github.houbb.logstash4j.plugins.output.StdOut");
                list.add(logstashConfigClassName);
                return list;
            }
        };

        //run
        LogstashManageCoreBs.newInstance()
                .manageConfig(config)
                .init()
                .run();
    }

}

測試日誌

11111111111
Stdout: {addField2=value2, addField1=value1, message=11111111111}
3333333333333333
Stdout: {addField2=value2, addField1=value1, message=3333333333333333}

yaml 例子

yaml 配置

  • gen_test.yaml
---
outputs:
  - StdOut: {}
inputs:
  - StdIn: {}
filters:
  - Add:
      addField2: "value2"
      addField1: "value1"

java 代碼

ILogstashManageConfig config = new YamlLogstashManageConfig("gen_test.yaml");

 LogstashManageCoreBs.newInstance()
         .manageConfig(config)
         .init()
         .run();

效果和上面類似,只是換了一種配置方式。

ROAD-MAP

滿足下面的話,可以讓組件更加的強大。

  • [ ] 如何可以讓不同的 event 進行關聯?
  • [ ] 如何讓 input/filter/ouput 之間也可以關聯?

日誌矩陣

日誌採集-logcollect-go

日誌處理-logstash4j

日誌處理插件-logstash4j-plugins

日誌整合框架-log-integration

切面日誌-auto-log

日誌脱敏-sensitive

日誌的全鏈路

全鏈路 auto-trace

唯一的跟蹤號-trace-id

[包內鏈路信息]()

[應用間鏈路]()

日誌檢索

分詞-segment

拼音-pinyin

中文繁簡體轉換-opencc4j

[日誌存儲+檢索 類似ES:TODO]()

[日誌的可視化 類似kibana:TODO]()

[日誌分析-錯誤+慢日誌+報警平台:TODO]()

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.