gpt4 book ai didi

nginx - 在 logstash 或 elasticsearch 中更改 nginx 访问日志数据

转载 作者:行者123 更新时间:2023-12-03 02:01:39 26 4
gpt4 key购买 nike

在我的项目中,我为移动应用程序提供 api,并且在每个 api 中,前端使用 session_id标记用户真实性,并在服务器端接受并验证它。

最近想用ELK( elasticsearch , logstash , kibana )来保存和分析Web服务器访问日志,提取一些常见的用户事件。遇到一些问题,想换session_id在日志中 user_id (在程序中,我可以通过查询数据库从 user_id 获得 session_id)但我就是不知道怎么做?

可以logstash's过滤器这样做?或者当日志被索引到 elasticsearch 时我应该更改数据吗? ?

最佳答案

好吧,我试着给你一个答案,假设你有某种接口(interface)可以从中检索 user_id .其实你需要做两件事:

  • 将您的日志行拆分为单独的字段,以获得包含您的 session_id 的字段
  • 获取对应的user_id使用某种 api

  • 拆分您的日志行

    您需要将输入拆分为单独的字段。这可以通过像 grok 这样的过滤器来完成。和/或 kv .看看 some SO questions查找匹配的 grok 模式或使用 grok debugger .如果您需要帮助,请提供一些日志行。

    编辑:对于您给定的示例,您的配置应如下所示:
    filter {
    grok {
    match => [ 'message', '"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent} %{QS:xforwardedfor}' ]
    }
    kv {
    field_split => "&?"
    }
    }

    请尝试并自行调整以获得 session_id .

    一旦你有一个名为 session_id 的字段您可以继续执行第 2 步。

    获取 user_id

    正如您已经提到的,您需要一个过滤器插件,因为 session_id必须可用。有几个 official plugins但我认为它们都不适合你的目的。由于 session_id是动态分配的,您不能使用静态 translate filter或类似的东西。

    这取决于您的 api,但一种可能的方法是获取相应的 user_id通过http请求。为此,您可以使用社区插件。例如 logstash-filter-rest使用这样的配置:
    filter {
    rest {
    url => "http://yourserver/getUserBySessionId/"
    sprintf => true
    method => "post"
    params => {
    "session_id" => "%{session_id}"
    }
    response_key => "user_id"
    }
    }

    关于nginx - 在 logstash 或 elasticsearch 中更改 nginx 访问日志数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31934538/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com