項目簡介
用於日誌的輸入、轉換處理、輸出, 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]()