`

用 logstash 统计 Nginx 的 http_accounting 模块输出

阅读更多

http_accounting 是 Nginx 的一个第三方模块,会每隔5分钟自动统计 Nginx 所服务的流量,然后发送给 syslog。

流量以 accounting_id 为标签来统计,这个标签可以设置在 server {} 级别,也可以设置在 location /urlpath {} 级别,非常灵活。 统计的内容包括响应字节数,各种状态码的响应个数。

公司原先是有一套基于 rrd 的系统,来收集处理这些 syslog 数据并作出预警判断、异常报警。不过今天不讨论这个,而是试图用最简单的方式,快速的搞定类似的中心平台。

这里当然是 logstash 的最佳用武之地。

logstash.conf 示例如下:

input {
    syslog {
        port => 29124
    }
}
filter {
    grok {
        match => [ "message", "^%{SYSLOGTIMESTAMP:timestamp}\|\| pid:\d+\|from:\d{10}\|to:\d{10}\|accounting_id:%{WORD:accounting}\|requests:%{NUMBER:req:int}\|bytes_out:%{NUMBER:size:int}\|(?:200:%{NUMBER:count.200:int}\|?)?(?:206:%{NUMBER:count.206:int}\|?)?(?:301:%{NUMBER:count.301:int}\|?)?(?:302:%{NUMBER:count.302:int}\|?)?(?:304:%{NUMBER:count.304:int}\|?)?(?:400:%{NUMBER:count.400:int}\|?)?(?:401:%{NUMBER:count.401:int}\|?)?(?:403:%{NUMBER:count.403:int}\|?)?(?:404:%{NUMBER:count.404:int}\|?)?(?:499:%{NUMBER:count.499:int}\|?)?(?:500:%{NUMBER:count.500:int}\|?)?(?:502:%{NUMBER:count.502:int}\|?)?(?:503:%{NUMBER:count.503:int}\|?)?"
    }
    date {
        match => [ "timestamp", "MMM dd HH:mm:ss", "MMM  d HH:mm:ss" ]
    }
}
output {
    elasticsearch {
        embedded => true
    }
}

然后运行 java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf 即可完成收集入库! 再运行 java -jar logstash-1.3.3-flatjar.jar web 即可在9292端口访问到 Kibana 界面。

然后我们开始配置界面成自己需要的样子:

  1. Top-N 的流量图

点击 Query 搜索栏左边的有色圆点,弹出搜索栏配置框,默认是 lucene 搜索方式,改成topN 搜索方式。然后填入分析字段为 accounting。

点击 Event Over Time 柱状图右上角第二个的 Configure 小图标,弹出图表配置框:

  •  Panel 选项卡中修改 Chart value  count  totalValue Field 设置为 size,勾选 Seconds 项,转换 size 的累加值成每秒带宽(不然 interval 变化会导致累加值变化)
  •  Style 选项卡中修改 Chart Options  Bars 勾选项为 LinesY Format 为 bytes;
  •  Queries 选项卡中修改 Charted Queries  selected,然后点中右侧列出的请求中所需要的那项(当前只有一个,就是*)。

保存退出配置框,即可看到该图表开始自动更新。

  1. 50x 错误的技术图

点击 Query 搜索栏右边的 + 号,添加新的 Query 搜索栏,然后在新搜索栏里输入需要搜索的内容,比如 count.500

鼠标移动到流量图最左侧,会移出 Panel 快捷选项,点击最底下的 + 号选项添加新的 Panel:

  • 选择 Panel 类型为 histogram
  • 选择 Queries 类型为 selected,然后点中右侧列出的请求中所需要的那项(现在出现两个了,选中我们刚添加的 count.500)。

保存退出,即可看到新多出来一行,左侧三分之一(默认是span4,添加的时候可以选择)的位置有了一个柱状图。

重复这个步骤,添加 502/503 的柱状图。

  1. 仪表盘设置存档

页面右上角选择 Save 小图标保存即可。之后再上界面后,就可以点击右上角的 Load 小图标自动加载。

上面这个 grok 写的很难看,不过似乎也没有更好的办法~下一步会研究在这个基础上合并 skyline 预警。


2014 年 5 月 10 日更新:

 logstash/docs 上发现一个 filter 叫 kv,很适合这个场景,可以大大简化 grok 工作,新的 filter 配置如下:

filter {
    grok {
        match => [ "message", "^%{SYSLOGTIMESTAMP:timestamp}\|\| pid:\d+\|from:\d{10}\|to:\d{10}\|accounting_id:%{WORD:accounting}\|requests:%{NUMBER:req:int}\|bytes_out:%{NUMBER:size:int}\|%{DATA:status}"
    }
    kv {
        target => "code"
        source => "status"
        field_split => "|"
        value_split => ":"
    }
    ruby {
        code => "n={};event['code'].each_pair{|x,y|n[x]=y.to_i};event['code']=n"
    }
}

不晓得为什么 filter/mutate 不提供转换 Hash 的功能,所以只能把这行写在 filter/ruby 里面。kv 截出来的 value 默认都是字符串类型。


2014 年 5 月 28 日更新:

发现默认的 LVS 检查导致的 400 会记录到默认的 accounting 组(“default”)里,虽然不占带宽,却占不少请求数。这类日志可以在 logstash层面就干掉:

filter {
    grok {
        match => [ "message", "^%{SYSLOGTIMESTAMP:timestamp}\|\| pid:\d+\|from:\d{10}\|to:\d{10}\|accounting_id:%{WORD:accounting}\|requests:%{NUMBER:req:int}\|bytes_out:%{NUMBER:size:int}\|%{DATA:status}"
    }
    if [accounting] == 'default' {
        drop { }
    } else {
        kv {
            target => "code"
            source => "status"
            field_split => "|"
            value_split => ":"
        }
        ruby {
            code => "n={};event['code'].each_pair{|x,y|n[x]=y.to_i};event['code']=n"
        }
    }
}

另外说明一下,ngx_http_accounting_module 中设定 http_accounting_id 这步是预先处理的,所以只能写固定字符串,不能用 $host 之类的 nginx.conf 变量。

 

分享到:
评论

相关推荐

    05尚硅谷_Nginx_hit1qr_nginx尚硅谷_nginx_

    在“05尚硅谷_Nginx_hit1qr_nginx尚硅谷_nginx_”的课程中,你将全面学习到以上内容,包括详细的配置示例和实际操作指导,帮助你成为一名熟练的 Nginx 使用者。通过深入学习和实践,你将能够充分利用 Nginx 的强大...

    logstash_input_jdbc

    4. **事件处理**:抽取的数据将作为Logstash事件进行处理,可以进一步通过过滤器(如grok、mutate等)进行清洗、转换,然后通过输出插件(如elasticsearch、stdout等)发送到目标系统。 5. **版本兼容性**:在本例...

    openresty_nginx_logstash_kibana_elasticsearch_centos6:如何在centos6上安装(openresty + nginx + logstash + kibana + elasticsearch)

    openresty_nginx_logstash_kibana_elasticsearch_centos6 如何在centos6上安装(openresty + nginx + logstash + kibana + elasticsearch) 一些帮助和启发的链接: 安装openresty 假设机器上已经安装了nginx。 ...

    rpm离线安装logstash-6.2.4和logstash-output-jdbc插件

    centos7下安装rpm离线安装logstash-6.2.4和logstash-output-jdbc插件 内含logstash rpm包和已打包好的logstash-output-jdbc插件

    logstash数据从mysql导入es所需mysql的jar包

    在大数据处理和日志分析领域,Logstash是一个广泛使用的工具,它能够收集、解析和转发各种类型的数据。在本场景中,我们关注的是如何利用Logstash将MySQL数据库中的数据高效地导入到Elasticsearch(ES)中。这个过程...

    nginx的正则表达式,logstash用

    nginx的正则表达式,logstash用。grok是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。通常用来对日志数据进行预处理。

    Python库 | python_logstash_async_dwn-1.0.0-py2.py3-none-any.whl

    通过使用`python_logstash_async_dwn`,开发者可以在Python应用程序中无缝集成Logstash,实现高效且可靠的日志流传输。此库的`py2.py3-none-any`标识意味着它兼容Python 2和Python 3的多种平台,无论是在Windows、...

    logstash_linux-x86_64(v8.3.3)

    logstash_linux-x86_64(v8.3.3)

    logstash-8.1.0-x86_64.rpm

    logstash-8.1.0-x86_64.rpm

    logstash-output-amazon_es:Logstash输出插件,用于将logstash事件签名并导出到Amazon Elasticsearch Service

    logstash-output-amazon_es 弹性搜索6.4.0+ 6.5+Amazon Elasticsearch Service输出插件的配置要运行Logstash输出Amazon Elasticsearch Service插件,只需按照以下文档添加配置。 配置示例: output {

    nginx_config_scripts_new.zip

    6. **安全性与性能优化**:配置脚本中可能包含了关于安全设置和性能优化的部分,如限制请求速率、启用HTTP/2、配置SSL/TLS证书、使用GZIP压缩等,这些都是提升网站安全性和用户体验的重要措施。 7. **故障排查与...

    最新版linux logstash-7.10.0-linux-x86_64.tar.gz

    4. 启动 Logstash 服务,使用命令 `bin/logstash -f config.conf`。 为了充分利用 Logstash,用户需要熟悉配置文件语法,以及如何编写插件配置。此外,监控 Logstash 的运行状态和日志也是维护其正常运行的关键。 ...

    logstash-filter-jdbc_streaming:可以使用数据库中的数据丰富事件的 Logstash 过滤器

    Logstash插件 这是的插件。 它是完全免费和完全开源的。 许可证是 Apache 2.0,这意味着您可以随意以任何方式使用它。 JDBC 流过滤器插件已移动 这个 JDBC Streaming Filter Plugin 现在是的一部分; 在可能的情况...

    基于ELK的nginx-qps监控解决方案.docx

    例如,我们可以使用Terms聚合来统计nginx-qps的趋势图。 Kibana可视化 在Kibana中,我们可以使用丰富的图表和仪表盘功能来可视化nginx-qps的监控数据。例如,我们可以使用Line Chart来展示nginx-qps的趋势图。 ...

    最新版windows logstash-8.1.3-windows-x86_64.zip

    4. 使用命令行启动Logstash:`bin/logstash -f config_path`,其中`config_path`是你的配置文件路径。 在Windows环境下,Logstash还支持通过服务的方式安装和管理,这样可以在系统启动时自动启动Logstash服务,确保...

    logstash集成logstash-input-jdbc

    3. **配置文件**:在使用 logstash-input-jdbc 时,你需要创建一个 Logstash 配置文件,其中包含输入、过滤和输出的配置段。对于输入部分,你需要设置 JDBC 驱动、数据库连接信息(如 URL、用户名、密码)以及查询...

    PyPI 官网下载 | python_logstash_async_dwn-1.0.0-py2.py3-none-any.whl

    资源来自pypi官网。 资源全名:python_logstash_async_dwn-1.0.0-py2.py3-none-any.whl

    Filebeat 实时收集 Nginx 日志1

    相较于 Logstash,Filebeat 更加节省资源,启动快速,因此在实时收集 Nginx 日志等场景下,Filebeat 成为了首选。Logstash 虽然功能强大,但其内存消耗较大,如果服务器资源有限,可能会对其他服务造成影响。 在 ...

    最新版windows logstash-8.1.1-windows-x86_64.zip

    4. plugins:Logstash的输入、过滤和输出插件目录,这些插件允许扩展Logstash的功能以处理特定的数据源或目标。 5. data:运行时产生的临时或持久性数据可能存储在这里,如存储的事件或索引。 6. LICENSE:Logstash...

    nginx-1.8.0.tar.gz

    3. **负载均衡**: 使用Nginx的负载均衡模块,如`upstream`,配置负载均衡策略。 4. **健康检查**: 可以通过配置健康检查,确保只将请求转发到正常运行的后端服务器。 5. **会话持久化**: 通过`ip_hash`策略或第三方...

Global site tag (gtag.js) - Google Analytics