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

标签 nginx elasticsearch logstash

在我的项目中,我为移动应用程序提供 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/

    相关文章:

    python - Elastic Search 查询字符串解析器

    linux - 快速密码套件

    http - 如何在 Nginx 服务器上允许 PUT 文件请求?

    elasticsearch - 如何通过同义词进行搜索

    elasticsearch - logstash解析IPV6地址

    tomcat - Fluentbit 与 Tomcat 日志

    elasticsearch - Kibana 将@timestamp 字段显示为可读格式

    ruby-on-rails - 为什么带有 nginx 和自签名 SSL 证书的 Rails 无法工作?

    正则表达式模式不支持 # 符号

    elasticsearch - 如何使用ReactiveElasticsearchTemplate检索匹配和汇总