logging - 使用 Elasticstack 对 Innovapone 进行对数分析
问题描述
我的任务是构建一个日志分析工具来为我们的电话使用情况的 HR 创建报告。我们在现场有一个 Innovaphone IP6010,它通过 GET 请求将其日志传输到 apache 网络服务器。我目前正在尝试从 apache 访问日志中提取所有有用的信息,其中包含请求正文,其中包含日志本身。我使用的软件堆栈包括 Debian 10 上的 Elasticsearch、Kibana 和 Filebeat。我正在尝试利用 filebeat 的摄取管道功能使用 grok 过滤器进行日志分析。
日志示例:
/zz?event=A:Rel&time=1619596558&ts=5421116.946&date=20210428-075558&ref=9a9cdbc6138960015dfe00903329048b&dir=in&src_if=SIP1&dst_if=PRI2&src_cgpn=5961421358662&src_cdpn=0586583149&dst_cgpn=5961421358662&dst_cdpn=586583149&bcaps=03_90_90_a3&xcoder=G711A,20(3,0,6)&rcoder=G711A,20(0,0,7)&xstats=3+4+0+0+6&rstats=0+0+0+0+7&alert_time=1619596230&connect_time=1619596233&disc_time=1619596558&srv_id=00903329048b
当前的 grok 过滤器(从 /usr/share/filebeat/module/apache/access/ingest 的 filebeat 的 pipiline.yml 文件中取出):
- grok:
field: url.original
ignore_missing: false
patterns:
- '%{CONN_TIME:conntime}'
- '%{DISC_TIME:disctime}'
- '%{ALERT_TIME:alerttime}'
- '%{SOURCE:source}'
- '%{TARGET:target}'
- '%{EVENT_TYPE:eventtype}'
pattern_definitions:
CONN_TIME: "((?<=connect_time=)([0-9]*))"
DISC_TIME: "((?<=disc_time=)[0-9]*)"
ALERT_TIME: "((?<=alert_time=)([0-9]*))"
SOURCE: "((?<=src_cdpn=)[0-9]*)"
TARGET: "((?<=src_cgpn=)[0-9]*)"
EVENT_TYPE: "((?<=event=)[A-Z]*)"
我目前的问题是无法弄清楚为什么我在尝试制作新仪表板时无法访问 Kibana 中的字段。即使我得到对应索引的 match_all 的控制台输出,这些字段也不存在。任何帮助都将受到欢迎。
更新 1
根据模式,我发现 grok 在找到第一个命中后退出。您必须将它们拆分为单独的 grok 过滤器以获取所有字段。这是解决我的问题的新配置:
- grok:
ignore_missing: true
field: message
patterns:
- '%{CONN_TIME:innova.conntime}'
pattern_definitions:
CONN_TIME: "((?<=connect_time=)([0-9]*))"
- grok:
ignore_missing: true
field: message
patterns:
- '%{DISC_TIME:innova.disctime}'
pattern_definitions:
DISC_TIME: "((?<=disc_time=)[0-9]*)"
- grok:
ignore_missing: true
field: message
patterns:
- '%{ALERT_TIME:innova.alerttime}'
pattern_definitions:
ALERT_TIME: "((?<=alert_time=)([0-9]*))"
- grok:
ignore_missing: true
field: message
patterns:
- '%{SOURCE:innova.source}'
pattern_definitions:
SOURCE: "((?<=src_cdpn=)[0-9]*)"
- grok:
ignore_missing: true
field: message
patterns:
- '%{TARGET:innova.target}'
pattern_definitions:
TARGET: "((?<=src_cgpn=)[0-9]*)"
- grok:
ignore_missing: true
field: message
patterns:
- '%{EVENT_TYPE:innova.eventtype}'
pattern_definitions:
EVENT_TYPE: "((?<=event=)[A-Z]*)"
解决方案
该问题的解决方案是在更新 1 下的原始帖子中找到的解决方案
推荐阅读
- elasticsearch - Elasticsearch 创建快照需要多长时间?
- php - PHP # 通过引用访问受保护的或私有的类变量是预期的还是错误的?
- visual-studio-code - 提交交易失败:错误:没有合适的节点可用于初始化
- react-admin - `ArrayInput` 但仅适用于单个项目
- python - 模板无法识别 url 名称 django
- javascript - 浏览器插件可以“mitm”本地网络摄像头吗?
- java - getClassLoader().getResourceAsStream 返回 null
- css - 简单的引导轮播不适用于 Angular 8
- android - Android Play Core InAppReview Api 对话框未显示
- c++ - 如何重载 == 运算符而不使其成为友元函数?