logstash - 如果输入相同,如何区分logstash过滤器中的普通日志和审计日志?
问题描述
我有一个在 Kubernetes 中运行的应用程序。我有两种类型的日志,
- 普通日志
- 审核日志
例如,
以下是单个日志文件的示例,它具有两种数据、普通日志和审计
[INFO] [] [%{TraceId}] 2021-10-02_18:37:01.601 com.MyExample.Test Getting app config from Config server with Base URL BASE_URL for application.
[INFO] [] [%{TraceId}] 2021-10-02_18:25:11.807 Audit Hello world,test file,123454,123Addb,true
在上面的例子中,第一行是普通日志,第二行是审计数据。
我希望这两个日志都转到不同的索引(2 个不同的索引),并且我想为这两个日志应用不同类型的 logstash 过滤器。
关于如何解决上述问题的任何建议?
还添加了需求流程图: 在此处输入图像描述
我当前的logstash.conf文件仅用于审计目的,我使用的是 .csv 文件
input {
file {
path => "<path_to_dir>/audit-*.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
separator => ","
skip_header => "false"
columns => ["TraceId","timestamp","fcId","Ean","source","Quantity","updateSent","message"]
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "audit"
}
stdout {}
}
提前致谢!
解决方案
好的,这不是很干净,但是如果没有标签说audit
or ,我现在看不到其他方法log
。
您可以尝试将作为 logstash 核心的一部分的与匹配JAVACLASS
,可能您稍后将要使用它来分析您的日志。Grok 可以标记事件,以防审计日志中没有匹配项,并且根据您所说的,不应该有。只需使用并检查标签是否存在,如果存在,则为审计日志,否则为基本日志,然后根据需要处理您的事件。grok
grok
_grokparsefailure
grok
if
要让JAVACLASS
模式在其中工作grok
,您需要按照此处的说明设置ecs_compatibility
为。v1
免责声明,这是仅基于您提供的 2 个示例的想法,这可能是完全错误的,在这种情况下,请提供更多示例,因为没有明确的模式就不可能提出解决方案。
具体例子:
日志行
[INFO] [] [123trace456] 2021-10-02_18:37:01.601 com.MyExample.Test Getting app config from Config server with Base URL BASE_URL for application.
格罗模式
\[%{LOGLEVEL:loglevel}\] \[\] \[(?<traceId>[0-9a-z]*)\] (?<timestamp>[0-9\-_:\.]*) %{JAVACLASS:class} %{GREEDYDATA:message}
结果
{
"loglevel": [
[
"INFO"
]
],
"traceId": [
[
"123trace456"
]
],
"timestamp": [
[
"2021-10-02_18:37:01.601"
]
],
"class": [
[
"com.MyExample.Test"
]
],
"message": [
[
"Getting app config from Config server with Base URL BASE_URL for application."
]
]
}
我不知道那是哪种时间戳以及您的跟踪 ID 是什么样的,所以我只是做了任何事情,关键是JAVACLASS
模式的使用。我通过谷歌搜索找到了很多例子,请不要忘记,谷歌是你的朋友!
推荐阅读
- javascript - Angular订阅推送对象到数组
- command-line-interface - Activate the applications on ONOS in GNS3
- c# - Error "Incorrect Content Type" when sending parameter in ajax datatable to ASP.NET Core 2.0
- android - 如何在 javafx 应用程序中连接 Godaddy mysql
- angular - Ionic 4 / Angular 7 按钮在 Google Maps Marker InfoWindow 中工作
- python - 如何解析具有无限字典和列表的复杂列表
- android - 视图持有者中的 MVVM 停止倒计时计时器
- oracle - 在 oracle 中删除 set null 不起作用
- amazon-web-services - 使用 AWS Amplify Authentication 模块检查是否在 aws cognito 中验证了电子邮件
- jquery - 单选按钮正在工作,但在视觉上未选中。谁能解释如何修复它?