首页 > 解决方案 > 使用 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]*)"

标签: loggingelastic-stackelk

解决方案


该问题的解决方案是在更新 1 下的原始帖子中找到的解决方案


推荐阅读