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 界面。
然后我们开始配置界面成自己需要的样子:
- Top-N 的流量图
点击 Query 搜索栏左边的有色圆点,弹出搜索栏配置框,默认是 lucene
搜索方式,改成topN
搜索方式。然后填入分析字段为 accounting。
点击 Event Over Time 柱状图右上角第二个的 Configure
小图标,弹出图表配置框:
- 在
Panel
选项卡中修改Chart value
的count
为total
,Value Field
设置为 size,勾选Seconds
项,转换 size 的累加值成每秒带宽(不然 interval 变化会导致累加值变化); - 在
Style
选项卡中修改Chart Options
的Bars
勾选项为Lines
,Y Format
为 bytes; - 在
Queries
选项卡中修改Charted Queries
为selected
,然后点中右侧列出的请求中所需要的那项(当前只有一个,就是*
)。
保存退出配置框,即可看到该图表开始自动更新。
- 50x 错误的技术图
点击 Query 搜索栏右边的 + 号,添加新的 Query 搜索栏,然后在新搜索栏里输入需要搜索的内容,比如 count.500
;
鼠标移动到流量图最左侧,会移出 Panel 快捷选项,点击最底下的 + 号选项添加新的 Panel:
- 选择 Panel 类型为
histogram
; - 选择 Queries 类型为
selected
,然后点中右侧列出的请求中所需要的那项(现在出现两个了,选中我们刚添加的count.500
)。
保存退出,即可看到新多出来一行,左侧三分之一(默认是span4,添加的时候可以选择)的位置有了一个柱状图。
重复这个步骤,添加 502/503 的柱状图。
- 仪表盘设置存档
页面右上角选择 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_”的课程中,你将全面学习到以上内容,包括详细的配置示例和实际操作指导,帮助你成为一名熟练的 Nginx 使用者。通过深入学习和实践,你将能够充分利用 Nginx 的强大...
4. **事件处理**:抽取的数据将作为Logstash事件进行处理,可以进一步通过过滤器(如grok、mutate等)进行清洗、转换,然后通过输出插件(如elasticsearch、stdout等)发送到目标系统。 5. **版本兼容性**:在本例...
openresty_nginx_logstash_kibana_elasticsearch_centos6 如何在centos6上安装(openresty + nginx + logstash + kibana + elasticsearch) 一些帮助和启发的链接: 安装openresty 假设机器上已经安装了nginx。 ...
centos7下安装rpm离线安装logstash-6.2.4和logstash-output-jdbc插件 内含logstash rpm包和已打包好的logstash-output-jdbc插件
在大数据处理和日志分析领域,Logstash是一个广泛使用的工具,它能够收集、解析和转发各种类型的数据。在本场景中,我们关注的是如何利用Logstash将MySQL数据库中的数据高效地导入到Elasticsearch(ES)中。这个过程...
nginx的正则表达式,logstash用。grok是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。通常用来对日志数据进行预处理。
通过使用`python_logstash_async_dwn`,开发者可以在Python应用程序中无缝集成Logstash,实现高效且可靠的日志流传输。此库的`py2.py3-none-any`标识意味着它兼容Python 2和Python 3的多种平台,无论是在Windows、...
logstash_linux-x86_64(v8.3.3)
logstash-8.1.0-x86_64.rpm
logstash-output-amazon_es 弹性搜索6.4.0+ 6.5+Amazon Elasticsearch Service输出插件的配置要运行Logstash输出Amazon Elasticsearch Service插件,只需按照以下文档添加配置。 配置示例: output {
6. **安全性与性能优化**:配置脚本中可能包含了关于安全设置和性能优化的部分,如限制请求速率、启用HTTP/2、配置SSL/TLS证书、使用GZIP压缩等,这些都是提升网站安全性和用户体验的重要措施。 7. **故障排查与...
4. 启动 Logstash 服务,使用命令 `bin/logstash -f config.conf`。 为了充分利用 Logstash,用户需要熟悉配置文件语法,以及如何编写插件配置。此外,监控 Logstash 的运行状态和日志也是维护其正常运行的关键。 ...
Logstash插件 这是的插件。 它是完全免费和完全开源的。 许可证是 Apache 2.0,这意味着您可以随意以任何方式使用它。 JDBC 流过滤器插件已移动 这个 JDBC Streaming Filter Plugin 现在是的一部分; 在可能的情况...
例如,我们可以使用Terms聚合来统计nginx-qps的趋势图。 Kibana可视化 在Kibana中,我们可以使用丰富的图表和仪表盘功能来可视化nginx-qps的监控数据。例如,我们可以使用Line Chart来展示nginx-qps的趋势图。 ...
4. 使用命令行启动Logstash:`bin/logstash -f config_path`,其中`config_path`是你的配置文件路径。 在Windows环境下,Logstash还支持通过服务的方式安装和管理,这样可以在系统启动时自动启动Logstash服务,确保...
3. **配置文件**:在使用 logstash-input-jdbc 时,你需要创建一个 Logstash 配置文件,其中包含输入、过滤和输出的配置段。对于输入部分,你需要设置 JDBC 驱动、数据库连接信息(如 URL、用户名、密码)以及查询...
资源来自pypi官网。 资源全名:python_logstash_async_dwn-1.0.0-py2.py3-none-any.whl
相较于 Logstash,Filebeat 更加节省资源,启动快速,因此在实时收集 Nginx 日志等场景下,Filebeat 成为了首选。Logstash 虽然功能强大,但其内存消耗较大,如果服务器资源有限,可能会对其他服务造成影响。 在 ...
4. plugins:Logstash的输入、过滤和输出插件目录,这些插件允许扩展Logstash的功能以处理特定的数据源或目标。 5. data:运行时产生的临时或持久性数据可能存储在这里,如存储的事件或索引。 6. LICENSE:Logstash...
3. **负载均衡**: 使用Nginx的负载均衡模块,如`upstream`,配置负载均衡策略。 4. **健康检查**: 可以通过配置健康检查,确保只将请求转发到正常运行的后端服务器。 5. **会话持久化**: 通过`ip_hash`策略或第三方...