搭建ELK网站浏览可视化监控前提安装 ElasticSearch 安装 和 kibana 、 logstash 安装

文章目录

  • ELK 网站流量可视化监控
    • 工具
    • 网站流量可视化监控配置
      • 部署 Tomcat 应用
      • 配置 `logstash` 输入、解析、输出日志到 `elasticSearch`
        • tomcat access
        • nginx access
          • 格式一
          • 格式二
        • 启动 logstash
        • Logstash 与 ElasticSearch 集成
      • kibana 进行视图展示
        • 匹配索引
          • 查询日志插入到 ES 上创建的索引
          • 导入索引
        • 探索数据
        • 数据可视化
      • Logstash 、Kibana 时区问题
        • logstsh 的时区问题
          • 复现问题
          • 解决问题
        • kibana 的时区问题
          • 复现问题
          • 解决问题
        • kibana 通过 nginx 权限认证

ELK 网站流量可视化监控

通过上图我们可以看到,ELK 是由三个 Elastic 的产品组合而成,分别是 ElasticSearch、Logstash 和 Kibana。三者之间的部署关系如下图所示:

Logstash 就好比是挖矿工,将原料采集回来存放到 ElasticSearch 这个仓库中,Kibana 再将存放在 ElasticSearch 中的原料进行加工包装成产品,输出到 web 界面。基本工作原理如下图所示

工具

Grok Debugger 国内镜像 是一个常用的对日志进行结构化的一个工具,可以通过在线工具进行调试:
http://grokdebug.herokuapp.com
grok 正则匹配工具(科学上网)

grok国内镜像

网站流量可视化监控配置

部署 Tomcat 应用

部署 tomcat 服务应用,将 access 日志输出到 /guaoran/elk/webapps/logs/bigdata/目录下

修改 tomcat 日志输出路径 conf/server.xml

<Host><Valve className="org.apache.catalina.valves.AccessLogValve" directory="/guaoran/elk/webapps/logs/bigdata"prefix="localhost_access_log" suffix=".log"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Context path="/" docBase="/guaoran/elk/webapps/bigdata" reloadable="false"></Context>
</Host>

配置 logstash 输入、解析、输出日志到 elasticSearch

tomcat access

创建正则配置目录 和 添加正则文件

/guaoran/elk/logstash-6.5.1/config
mkdir patterns
vi /guaoran/elk/logstash-6.5.1/config/patterns/tomcat

日志内容 /guaoran/elk/webapps/logs/bigdata/localhost_access_log.2019-05-09.log

10.30.185.250 - - [11/Apr/2019:17:59:47 +0800] "GET / HTTP/1.0" 200 11064
10.30.185.250 - - [11/Apr/2019:17:59:47 +0800] "GET /css/base.css HTTP/1.0" 200 996
10.30.185.250 - - [11/Apr/2019:17:59:47 +0800] "GET /css/common.css HTTP/1.0" 200 10564
10.30.185.250 - - [11/Apr/2019:17:59:47 +0800] "GET /css/index.css HTTP/1.0" 200 23328

正则内容 /guaoran/elk/logstash-6.5.1/config/patterns/tomcat

TOMCATACCESS %{IPORHOST:clientip} (?:-|%{USER:ident}) (?:-|%{USER:auth}) \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|-)\" %{NUMBER:response} (?:-|%{NUMBER:bytes})

启动配置 /guaoran/elk/logstash-6.5.1/config/tomcat.conf

input {file {path => ["/guaoran/elk/webapps/logs/bigdata/localhost_access_log.*.log"]type => "bigdata_tomcat"#sincedb_path => "/dev/null"start_position => "beginning"}
}filter {if [type] == "bigdata_tomcat" {grok {patterns_dir => "/guaoran/elk/logstash-6.5.1/config/patterns/"match => {"message" => "%{TOMCATACCESS}"}}date {match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"]}}
}output {stdout {codec => rubydebug}elasticsearch {hosts => ["http://192.168.192.129:9200"]index => "logstash-%{type}-%{+YYYY.MM.dd}"document_type => "%{type}"sniffing => true}
}

nginx access

格式一

日志格式

log_format main '$host $status [$time_local] $remote_addr [$time_local] $request_uri ''"$http_referer" "$http_user_agent" "$http_x_forwarded_for" ''$bytes_sent $request_time $sent_http_x_cache_hit';

日志内容 /guaoran/elk/webapps/logs/agdata/

www.guaoran.cn 200 [08/May/2019:08:00:01 +0800] 127.0.0.1 [08/May/2019:08:00:01 +0800] /datarecommend/getrecommand-465212.do "-" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)" "-" 811 0.011 -
www.guaoran.cn 206 [09/May/2019:03:34:18 +0800] 127.0.0.1 [09/May/2019:03:34:18 +0800] /js/jquery-1.9.1.js "http://www.guaoran.cn/client/helpInfo.html" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" "-" 23869 0.003 -

启动配置 /guaoran/elk/logstash-6.5.1/config/agdata.conf

input {file {path => ["/guaoran/elk/webapps/logs/agdata/*"]type => "agdata_nginx"#sincedb_path => "/dev/null"start_position => "beginning"}
}filter {grok {match => {"message" => "(?:-|%{URIHOST:HOSTNAME}) %{NOTSPACE:response} \[%{HTTPDATE:timestamp2}\] %{IPORHOST:clientip} \[%{HTTPDATE:timestamp}\] %{NOTSPACE:request} (?:-|%{QS:referrer}) %{QS:agent} %{QS:xforwardedfor} (?:-|%{NUMBER:bytes}) %{BASE10NUM:response_time} "}}date {match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"]}mutate{gsub => ["HOSTNAME",'"','']}mutate{convert => {"bytes"=>"float"}}geoip{source => "clientip"}useragent{source => "agent"target => "useragent"}if [referrer] =~ /^"http/ {grok{match => {"referrer" => '%{URIPROTO}://%{URIHOST:referrer_host}'}}}mutate{gsub => ["referrer",'"','']}mutate{remove_field=>["message"]}
}output {#stdout{#  codec => rubydebug{metadata => true#    }#}elasticsearch {hosts => ["http://192.168.192.129:9200"]index => "logstash-%{type}-%{+YYYY.MM.dd}"document_type => "%{type}"sniffing => true}
}
格式二

日志内容 /guaoran/elk/webapps/logs/demo/

127.0.0.1 - - [11/Nov/2018:00:01:02 +0800] "POST /api3/getrelevantcourse HTTP/1.1" 200 774 "www.guaoran.cn" "-" cid=608&secrect=xx&timestamp=1478707262003&token=xx&uid=4203162 "guaoran/5.0.2 (iPhone; iOS 10.0.1; Scale/3.00)" "-" 127.0.0.1:80 200 0.048 0.048
127.0.0.1 - - [11/Nov/2018:00:01:18 +0800] "POST /course/ajaxmediauser HTTP/1.1" 200 54 "www.guaoran.cn" "http://www.guaoran.cn/code/1883" mid=1883&time=60 "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko" "-" 127.0.0.1:80 200 0.016 0.016
127.0.0.1 - - [11/Nov/2018:00:01:18 +0800] "HEAD / HTTP/1.1" 301 0 "127.0.0.1" "-" - "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-" - - - 0.000

启动配置 /guaoran/elk/logstash-6.5.1/config/demo.conf

input{file{path => "/guaoran/elk/webapps/logs/demo/access.*.log"#sincedb_path => "/dev/null"start_position => "beginning"}
}filter{if [@metadata][debug] {mutate{ remove_field => ["headers"] }}grok{match => {"message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:[@metadata][timestamp]}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NOTSPACE:response_status_code} (?:%{NUMBER:bytes}|-) %{QS:hostname} %{QS:referrer} (?:-|%{DATA:params}) %{QS:agent} %{QS:xforwardedfor} (?:-|%{MY_URI:upstream_host}) (?:-|%{MY_RESP:upstream_response_status_code}) (?:-|%{MY_RESP_TIME:upstream_response_time}) %{BASE10NUM:response_time:float}'}pattern_definitions=>{"MY_URI" => '%{URIHOST}(, %{URIHOST})*'"MY_RESP" => '%{NUMBER}(, %{NUMBER})*'"MY_RESP_TIME" => '%{BASE10NUM}(, %{BASE10NUM})*'}}date{match => ["[@metadata][timestamp]","dd/MMM/yyyy:HH:mm:ss Z"]}mutate{split => {"upstream_host" => ", "}split => {"upstream_response_status_code" => ", "}split => {"upstream_response_time" => ", "}gsub => ["hostname",'"','']}mutate{convert => {"upstream_response_time"=>"float"}}geoip{source => "clientip"}useragent{source => "agent"target => "useragent"}mutate{add_field => {"[@metadata][index]" => "nginx_logs_%{+YYYY.MM.dd}"}}if [referrer] =~ /^"http/ {grok{match => {"referrer" => '%{URIPROTO}://%{URIHOST:referrer_host}'}}if "guaoran.cn" in [referrer_host] {grok{match => {"referrer" => ['%{URIPROTO}://%{URIHOST}/(%{NOTSPACE:demo_type}/%{NOTSPACE:demo_res_id})?"','%{URIPROTO}://%{URIHOST}/(%{NOTSPACE:demo_type})?"']}}}}mutate{gsub => ["referrer",'"','']}if "_grokparsefailure" in [tags] {mutate{replace => {"[@metadata][index]" => "nginx_logs_parsefailure_%{+YYYY.MM.dd}"}}}else{mutate{remove_field=>["message"]}}
}output{if [@metadata][debug]{stdout{codec => rubydebug{metadata => true}}}else{#stdout{#  codec=>rubydebug#}elasticsearch{index => "%{[@metadata][index]}"}}
}

启动 logstash

cd /guaoran/elk/logstash-6.5.1/
bin/logstash -f config/demo.conf -r

Logstash 与 ElasticSearch 集成

当需要将 tomcat 的 access 日志文件保存到 ElasticSearch 中时,在 logstash.confoutput 里面追加以下内容

elasticsearch {hosts => ["http://192.168.192.129:9200"]index => "logstash-%{type}-%{+YYYY.MM.dd}"document_type => "%{type}"sniffing => true
}

kibana 进行视图展示

官网用户手册

当我们访问 tomcat 应用时 ,logstash 启动窗口 会输出日志,日志如下

{"timestamp" => "08/May/2019:10:28:36 +0800","bytes" => "10809","response" => "200","httpversion" => "1.1","@timestamp" => 2019-05-08T02:28:36.000Z,"path" => "/guaoran/elk/webapps/logs/localhost_access_log.2019-05-08.log","type" => "tomcat_access","host" => "localhost.localdomain","verb" => "POST","clientip" => "192.168.192.1","message" => "192.168.192.1 - - [08/May/2019:10:28:36 +0800] \"POST /index.html HTTP/1.1\" 200 10809","@version" => "1","request" => "/index.html"
}
匹配索引

我们在正式使用Kibana之前,需要先匹配我们Elasticsearch中的索引库,因为我们的Elasticsearch有可能会有很多索引库,Kibana为了性能因素,是不会事先把所有的索引库都导进来的,我们需要用那个索引就导哪个索引。

查询日志插入到 ES 上创建的索引

点击 kibana 菜单 monitoring,点击 ElasticsearchOverview ,点击 Indices,或者通过下面的步骤也可以看到存在哪些索引

导入索引

点击 kibana 菜单 Management,点击 KibanaIndex Patterns ,点击 Create index pattern

上图中方框便是所有的索引,在 Index pattern 中选择需要的索引,可以正则匹配。输入好之后点击 Next step ,选择时间过滤字段 @timestamp ,点击 Create index pattern ,完成匹配。

下图可以看到对应的字段

探索数据

点击 kibana 菜单 Discover,点击 KibanaIndex Patterns ,点击 Create index pattern

可选择对应的索引,数据过滤或者展示某些感兴趣的字段

数据可视化

点击 kibana 菜单 Visualize,点击 + 按钮,进行选择对应的视图

Logstash 、Kibana 时区问题

logstsh 的时区问题

复现问题

以 nginx 日志格式和配置 为例

日志内容:

192.168.20.2 200 [14/May/2019:00:00:02 +0800] 192.168.20.44 [14/May/2019:00:00:02 +0800] /dataManual/dataIndustryTree.html "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36" "-" 11329 0.008 -

当开启 stdout

stdout{codec=>rubydebug
}

logstash 启动时读取日志时的输出为:

{"request" => "/dataManual/dataIndustryTree.html",..."@timestamp" => 2019-05-13T16:00:02.000Z,..."timestamp" => "14/May/2019:00:00:02 +0800"
}

此时会有两个问题:

  1. 我们读取的时间为 14/May/2019:00:00:02 +0800 但是 @timestamp 时间却少了八个小时
  2. 打开 kibana 查看生成的索引文件,索引文件名称却不是 xxxx-2019.05.14 ,而是 xxxx-2019.05.13 可知索引文件的名称是通过 @timestamp 的时间而定的
解决问题

在配置文件中的 filter 中加入以下配置

date {match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"]target => "@timestamp"
}
ruby {code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"
}
ruby {code => "event.set('@timestamp',event.get('timestamp'))"
}
mutate {remove_field => ["timestamp"]}

再次执行导入,输出结果

{"request" => "/dataManual/dataIndustryTree.html","@timestamp" => 2019-05-14T00:00:02.000Z,"timestamp" => 2019-05-14T00:00:02.000Z
}

此时查看上面的两个问题已经解决了

kibana 的时区问题

复现问题

当我们在 kibanaDiscover 中对刚刚生成的索引文件进行展示时,如图所示

上图中的时间展示却又多个8个小时,通过 postman 查看该索引的内容,如下

可以得到 存储的内容是正确的,但是 kibana 中展示不正确,可得又是 kibana 的时区问题

解决问题

修改 kibana 的时区

点击 kibana 的菜单 Management ,点击 Advanced Settings

dateFormat:tzBrowser 改成 Etc/UTC

保存后再次点击 Discover 会发现问题解决

kibana 通过 nginx 权限认证

设置 用户名为 admin ,密码为 123456 存储到 htpasswd

sudo htpasswd -c -b /usr/local/nginx/conf/extra/htpasswd admin 123456

nginx.conf

server {listen       5602;access_log /mnt/logs/nginx/kibana.access.log main;location / {proxy_redirect         off;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_pass  http://kibanaServer;auth_basic "kibana login auth";auth_basic_user_file /usr/local/nginx/conf/extra/htpasswd;}
}

基于ELK搭建网站监控可视化相关推荐

  1. 基于ELK搭建网站实时日志监控平台

    基于ELK搭建网站实时日志监控平台 1 为什么要用到ELK 早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail.如果服务部署了好几台,就要分 ...

  2. Spring Boot + ELK搭建日志监控框架

    Spring Boot + ELK搭建日志监控框架 准备ELK三件套 ​ Elasticsearch+Logstash+Kibana ​ 下载地址:https://www.elastic.co/cn/ ...

  3. 实操:基于LNMP搭建zabbix监控

    文章目录 一:环境准备: 二:zabbix概述 2.1 查看官网 2.2 zabbix与nagios 2.3 zzbbix介绍 2.4 zabbix软件包 三:基于LNMP搭建zabbix 3.1 创 ...

  4. 如何快速实现一个基于Nginx的网站监控场景 – 操作篇

    本文介绍ARMS如何实现Nginx的监控场景,对于ARMS本文主要解决的问题,还记得小明的老板给他布置的任务吗?需求回顾 1. ARMS的Nginx监控方案概述和准备 目前在监控领域上比较流行的数据处 ...

  5. 如何基于ARMS快速实现一个基于Nginx的网站监控场景 – 操作篇

    原文链接 本文介绍ARMS如何实现Nginx的监控场景,对于ARMS本文主要解决的问题,还记得小明的老板给他布置的任务吗?需求回顾 1. ARMS的Nginx监控方案概述和准备 目前在监控领域上比较流 ...

  6. 基于fastdfs-zyc搭建分布式监控系统

    基于中标麒麟操作系统搭建fastdfs-zyc分布式监控系统 1. 简介 2. 系统环境要求 3. 环境部署,直接上代码 4. 安装tomcat,jdk这步省略,可以自己百度Centos7安装tomc ...

  7. 基于VuePress搭建网站

    一.开通云服务器 (一)进入控制台 先注册登录阿里云官网,然后在如图所示页面进入控制台 (二)进入云服务器ECS (三)创建实例 创建实例主要分为:基础配置.网络和安全组.系统配置(选填).分组设置( ...

  8. 基于wordpress搭建网站和基于nodejs自己搭建

    帮朋友做一个下载站的网站,有两种方案: 1 基于wordpress 优势:自带后台,很多插件可用,同时网站结构.组织.分类系统.tag系统还是蛮实用的 劣势:需要自定义post的字段,比如下载链接.名 ...

  9. 基于ELK的简单数据分析

    原文链接: http://www.open-open.com/lib/view/open1455673846058.html 环境 CentOS 6.5 64位 JDK 1.8.0_20 Elasti ...

最新文章

  1. 首届“AIIA杯”人工智能巡回赛起航,5大赛区邀你来战
  2. wordcloud安装失败原因和解决方法
  3. 【MM模块】Batch 批次管理1
  4. leecode第一百五十五题(最小栈)
  5. mysql 数据库操作语句_mysql数据库操作语句大全
  6. joo工作流_不要错过使用jOOλ或jOOQ编写Java 8 SQL单行代码的机会
  7. xp系统上安装linux系统教程,XP系统如何安装fedora linux双系统?WinXP安装fedora linux双系统的方法...
  8. mongoose更新数据,如果这条记录不存在,则直接变为新增
  9. Python机器学习方向企业面试题(三)
  10. python列表去括号_python的常用序列
  11. 三天研读《中兴电路设计规范》精华总结
  12. win10如何共享计算机网络打印机,win10如何共享打印机给其它电脑,Win10设置打印机共享操作步骤...
  13. Qt编写可视化大屏电子看板系统2-配色方案
  14. 说说全栈工程师有什么发展前景?
  15. hdu 1165 Eddy's research II(数学:等差 等比公式)
  16. 不花里胡哨看电脑主板支持最大内存与频率
  17. 如何在Windows 10上控制多个显示器的功能
  18. PictureSelector 使用
  19. 如何做好服务器的维护
  20. 数据分析处理库——Pandas

热门文章

  1. 05-属性控制便签block
  2. android极光推送成功率,记一次调用极光推送的惨痛经历
  3. WebLogic 12c 配置 https
  4. 灵活强大的mysql代理层_ProxySQL--灵活强大的MySQL代理层
  5. python安装修改变量_linux python升级及全局环境变量设置
  6. docker安装mysql 5.7
  7. 企业云管理之企业云平台管理
  8. 应广单片机PFS122
  9. Hbuilder音乐封面项目
  10. animate动画函数的封装方法