先展示下grafana 的一张大图。

看图还是比较炫酷的,那怎么才能够展示这样的大屏,咱们一步一步拆解

用到组件:nginx ,filebeat,logstash,elasticsearch,grafana

流程图如下:

1、nginx代理设置

log_format  elklog '$remote_addr - $remote_user [$time_local] "$host" $server_port "$request" ''$status $body_bytes_sent $bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" $request_time ''"$upstream_response_time" "$upstream_addr" "$upstream_status" ';

2、filebeat 将nginx日志发往logstash,编辑filebeat.yml

filebeat.inputs:
- type: logenabled: truepaths:- /opt/servers/nginx/logs/access.portal.*.log- /opt/servers/nginx/logs/access.*.logfields:filetype: nginx   #这一行的key:value都可以自己定义fields_under_root: trueoutput.logstash:hosts: ["logstash001:5044"]

3、logstash解析nginx日志写入elasticsearch


input {beats {port => 5044 #设置专用端口用于接受filebeat的日志}
}
filter {    # nginx 日志if ([fields][filetype] == "nginx") or ([fields][filetype] == "nginx-records") {grok {match => {"message" => "%{IP:remote_addr} - (?:%{DATA:remote_user}|-) \[%{HTTPDATE:timestamp}\] \"%{DATA:host}\" %{NUMBER:server_port} \"%{WORD:request_method} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:status} %{NUMBER:body_bytes_sent} %{NUMBER:bytes_sent} \"(?:%{DATA:http_referer}|-)\" \"%{DATA:http_user_agent}\" \"(?:%{DATA:http_x_forwarded_for}|-)\" (?:%{DATA:request_time}|-) \"%{DATA:upstream_response_time}\" \"%{DATA:upstream_addr}\" \"%{NUMBER:upstream_status}\""}}urldecode{field => [ "request" ]}#解析requestmutate {add_field => { "http_request" => "%{request}" } #先随便创建一个字段,把request的值传给它。}#分割http_requestmutate {split  => [ "http_request"  , "?" ]   #http_request以问号为切割点add_field => [ "url" ,  "%{[http_request][0]}" ]    #取出数组中第一个值,同时添加url为新的field}#存在 [http_request][1] 机型解析参数if[http_request][1] {mutate {add_field => [ "args" ,  "%{[http_request][1]}" ]    #取出http_request数组中第一个值,同时添加args为新的field}kv {source => "args"field_split => "&"target => "query"}#删除args字段mutate {remove_field => [ "args" ]}}#删除http_request字段mutate {remove_field => [ "http_request" ]}geoip {#multiLang => "zh-CN"target => "geoip"source => "remote_addr"database => "/home/hadoop/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-filter-geoip-6.0.5-java/vendor/GeoLite2-City.mmdb"    #指定库的位置add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]# 去掉显示 geoip 显示的多余信息remove_field => ["[geoip][latitude]", "[geoip][longitude]", "[geoip][country_code]", "[geoip][country_code2]", "[geoip][country_code3]", "[geoip][timezone]", "[geoip][continent_code]", "[geoip][region_code]"]}mutate {#重名字段改名rename  => { "remote_addr" => "client_ip" } #将key字段改名。rename  => { "http_x_forwarded_for" => "xff" } #将key字段改名。# rename  => { "host" => "domain" } #将key字段改名。rename  => { "http_referer" => "referer" } #将key字段改名。rename  => { "request_time" => "responsetime" } #将key字段改名。rename  => { "upstream_response_time" => "upstreamtime" } #将key字段改名。rename  => { "body_bytes_sent" => "size" } #将key字段改名。rename  => { "upstream_addr" => "upstreamhost" } #将key字段改名。#copy字段copy => { "host" => "domain" } #copy _ProductID字段改名。copy => { "client_ip" => "server_ip" }}mutate {convert => [ "size", "integer" ]convert => [ "status", "integer" ]convert => [ "responsetime", "float" ]convert => [ "upstreamtime", "float" ]convert => [ "[geoip][coordinates]", "float" ]# 过滤 filebeat 没用的字段,这里过滤的字段要考虑好输出到es的,否则过滤了就没法做判断remove_field => [ "ecs","agent","cloud","@version","input","logs_type","message" ]}# 根据http_user_agent来自动处理区分用户客户端系统与版本useragent {source => "http_user_agent"target => "ua"# 过滤useragent没用的字段remove_field => [ "[ua][minor]","[ua][major]","[ua][build]","[ua][patch]","[ua][os_minor]","[ua][os_major]" ]}#创建索引日期字段ruby{code => "event.set('index_day', (event.get('@timestamp').time.localtime + 0*60*60).strftime('%Y.%m.%d'))"}}   }
filter {if "_grokparsefailure" in [tags] {drop {}}
}output {if [fields][filetype] == "nginx" {elasticsearch {hosts => ["elasticsearch001:9200"]index => "logstash-nginx-log-%{index_day}"}# file {#path => "/home/hadoop/logstash-nginx-log-%{+YYYY.MM.dd}"#path => "/home/hadoop/logstash-nginx-log-%{index_day}"#}}
}

4、在kibana中查看elasticsearch数据

5、在grafana配置elasticsearch数据源

 需要注意的是最新的dashboard需要选择7.10+的elasticsearch,保存数据源后

AKA ES Nginx Logs | Grafana Labs 查看dashboard id:11190

在grafana中导入

完工。

本人喜欢研究新技术,并有丰富的大数据经验,希望和各位小伙伴探讨技术。

grafana监控nginx日志相关推荐

  1. 通过监控Nginx日志来实时屏蔽高频恶意访问的IP

    通过监控Nginx日志来实时屏蔽高频恶意访问的IP 目前在我的VPS上主要通过两种方式来限制ip的访问次数. 通过Nginx的limit_req配置来限制同一ip在一分钟内的访问次数 通过Nginx ...

  2. ELK集群部署(八)之监控nginx日志

    监控nginx日志 103上安装nginx yum install -y nginx启动nginx systemctl start nginx访问 http://192.168.56.103/ 配置n ...

  3. php 监控nginx日志,nginx启用status监控服务器状态的方法详解

    nginx和php-fpm一样内建了一个状态页,对于想了解nginx的状态以及监控nginx非常有帮助. 在Nginx中的stub_status模块主要用于查看Nginx的一些状态信息.本模块默认是不 ...

  4. ELK 6下日志平台监控Nginx日志构建实践

    整体架构 整体架构主要分为 4 个模块,分别提供不同的功能 Filebeat:轻量级数据收集引擎.基于原先 Logstash-fowarder 的源码改造出来.换句话说:Filebeat就是新版的 L ...

  5. php 监控nginx日志文件,Nginx 日志分析及实时监控

    本文档以 Nginx 日志为例,介绍如何使用日志分析服务来分析 Nginx 日志中的各种指标. 许多个人站长选取了 Nginx 作为服务器搭建网站,在对网站访问情况进行分析时,需要对 Nginx 访问 ...

  6. prometheus+grafana监控nginx

    ​在prometheus需要向ngxin中打入探针,通过探针获取ngxin信息,并通过接口输出.下文将讲述如何监控ngxin. 1.下载 为了各位小伙伴方便,这里提供了一波下载地址,如果模板不是特别满 ...

  7. Grafana分析Nginx日志

    配置Groub by -Terms时报错,提示需要设置fielddata=true,报错内容大概如下: "Fielddata is disabled on text fields by de ...

  8. Zabbix4.4 技术解决方案(实战篇) 监控 Nginx 日志 统计WEB网站PV和UV

    PV(Page View)访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量:在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计. UV (unique v ...

  9. 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版

    超详细新版ELK8.5.0+lnmp1.9解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版 前言 1.基础环境和所需要的软件包 1.1服务器配置(仅供参考) 1.2 ...

最新文章

  1. RabbitMQ 七战 Kafka,差异立现!
  2. Python进阶08 异常处理
  3. MySQL运维实战 之 PHP访问MySQL你使用对了吗
  4. Java ObjectStreamClass lookup()方法与示例
  5. pytorch版本问题:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
  6. react中对于key值的理解
  7. DETR目标检测新范式带来的思考
  8. 【编译原理】- 递归下降的语法分析器的实现
  9. 语义分割学习——残差网络ResNet
  10. 二阶无源低通滤波器幅频特性曲线_一文看懂二阶lc低通滤波器的设计及原理
  11. xtu oj 1078
  12. React+Antd中修改分页组件的英文显示
  13. 2021-11-15求积分面积和旋转体积的二重积分方法
  14. Redundant Variable 多余变量
  15. 李永乐数学基础过关660题高等数学选择题
  16. idea引入maven依赖飘红解决方法
  17. python实现连连看辅助--图像识别延伸(百度AI)
  18. JS导出html的table表格
  19. docker flannel网络部署和路由走向分析
  20. 2017/7/30 第七天

热门文章

  1. 温室温度预测方案总结(万文详解)
  2. 【Web开发】粒子插件vue-particles的使用
  3. 力扣刷题-python-单调栈(单调递减栈、单调递增栈)
  4. Android中MD5的工具类---给祖国庆生
  5. 大淘宝 淘宝对传统营销的影响
  6. 迅雷云加速开放平台学习笔记——说明
  7. PostgreSQL 11 preview - bloom filter 误报率评估测试及如何降低误报 - 暨bloom filter应用于HEAP与INDEX的一致性检测...
  8. Google 为什么叫Google?
  9. 藏文在网页里显示成汉子_最终去处揭晓!红遍全网的藏族小伙丁真签约成国有公司员工...
  10. 微信小程序——对象中添加元素