ELK收集Apache的json格式访问日志并按状态码绘制图表

前言

需求说明:

部署一个Apache,收集Apache的json格式访问日志,并且将访问日志的状态码在kibana上绘制饼状图,添加到kibana的dashboard。

环境说明:

10.0.0.101(test101)——部署apache、filebeat
10.0.0.102(test102)——部署elasticsearch、kibana
备注:本次实验的重点在于怎样收集Apache的json格式日志,因此没有装logstash。日志数据从filebeat——elasticsearch——kibana展示

操作过程

1、Apache、filebeat的安装部署与日志采集

1.1 在test101部署Apache

[[email protected] ~]# yum -y install httpd

部署好之后,然后写了一个静态的index.html放在/var/www下面提供访问,以产生日志:

查看apache最初的access.log日志格式,是这样的:

[[email protected] httpd]# tailf access_log
10.0.0.1 - - [14/Dec/2018:09:35:37 +0800] "GET / HTTP/1.1" 200 13 "-" "Mozilla/5.0 (Windows NT 6.1; Win64;
10.0.0.1 - - [14/Dec/2018:09:35:56 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:43:51 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:36 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:36 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:36 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:45:37 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:57:13 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:57:13 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x
10.0.0.1 - - [14/Dec/2018:09:57:13 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x

1.2 部署filebeat

filebeat的部署和配置可以参考《用ELK工具收集rancher的容器日志》。这里主要修改input和elasticsearch这两个地方的配置就可以了

#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  paths:
    - /var/log/httpd/access_log      #apache日志路径
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  hosts: ["10.0.0.102:9200"]

然后,启动filebeat服务

1.3 在test102部署elasticsearch和kibana

部署和配置可参考《从0开始搭建ELK及采集日志的简单应用》,不赘述。

1.4 kibana查看日志

采集到kibana的界面展示是这样子的(第一次查看数据会要求在management里面创建索引,这里创建一个filebeat-*的索引就可以查看日志了)

这样展示的日志,只是简单的将日志收集起来。但是对照上图左边的关键字和右边灰色阴影的字段(左边的字段和右边的灰色阴影字段是一一对应的),可以看到我们需要的messages在一条信息里面,不便于日志的分析和图表的制作。因此需要将上图的message信息格式化成json格式输出,将里面的关键字段改成key:value的形式,并采集出来。

2、将Apache日志格式定义为json格式

修改Apache日志打印格式。修改在/etc/httpd/conf/httpd.conf,修改两个地方:
1)大概在202行的位置,找个空格加入下面的代码(注意空格什么的),这一串代码就是把上面信息的messages的关键信息改写成key:value的格式展示:

LogFormat "{ \"@timestamp\": \"%{%Y-%m-%dT%H:%M:%S%z}t\", \"@version\": \"1\", \"tags\":[\"apache\"], \"message\": \"%h %l %u %t \\\"%r\\\" %>s %b\", \"clientip\": \"%a\", \"duration\": %D, \"status\": %>s, \"request\": \"%U%q\", \"urlpath\": \"%U\", \"urlquery\": \"%q\", \"bytes\": %B, \"method\": \"%m\", \"site\": \"%{Host}i\", \"referer\": \"%{Referer}i\", \"useragent\": \"%{User-agent}i\" }" apache_json

2)修改CustomLog "logs/access_log" combined为CustomLog "logs/access_log" apache_json (把原来默认的combined换成apache_json,原文件大概在217行的位置)

将原来的access.log清空,并重启httpd服务

[[email protected] conf]# systemctl restart httpd

3、访问Apache首页,验证新的json日志格式

刷新apache首页,日志格式已经变成了这样:

[[email protected] httpd]# tailf access_log
{   "@timestamp": "2018-12-14T10:25:36+0800",   "@version": "1",    "tags":["apache"],  "message": "10.0.0.1 - - [14/Dec/2018:10:25:36 +0800] \"GET / HTTP/1.1\" 304 -",    "clientip": "10.0.0.1",     "duration": 737,    "status": 304,  "request": "/index.html",   "urlpath": "/index.html",   "urlquery": "",     "bytes": 0,     "method": "GET",    "site": "10.0.0.101",   "referer": "-",     "useragent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"    }
{   "@timestamp": "2018-12-14T10:25:45+0800",   "@version": "1",    "tags":["apache"],  "message": "10.0.0.1 - - [14/Dec/2018:10:25:45 +0800] \"GET / HTTP/1.1\" 304 -",    "clientip": "10.0.0.1",     "duration": 5506,   "status": 304,  "request": "/index.html",   "urlpath": "/index.html",   "urlquery": "",     "bytes": 0,     "method": "GET",    "site": "10.0.0.101",   "referer": "-",     "useragent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"    }

4、修改filebeat配置

修改filebeat.yaml,在日志路径后面加入下面两行,然后重启filebeat:

      paths:
        - /var/log/httpd/access_log
        #- c:\programdata\elasticsearch\logs\*
      json.keys_under_root: true     #这两行是为了让filebeat能够收集json格式的日志
      json.overwrite_keys: true

然后重启filebeat

5、清除kibana和elasticsearch里面的索引数据

因为在上面采集日志时,在kibana里面有创建一个filebeat-*的索引,最好清掉,让它重新生成

5.1 删除kibana界面创建的filebeat-*索引

5.2 清除elasticsearch原有的filebeat索引

[[email protected] ~]#  curl 10.0.0.102:9200/_cat/indices     #查看当前索引数据
green  open .kibana_1                 udOUvbprSnKWUJISwD0r_g 1 0  4 0  46.7kb  46.7kb
yellow open filebeat-6.5.3-2018.12.14 OvkhFVFYRIWlkH7gLslJ6A 3 1 14 0 150.1kb 150.1kb
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]#  curl -XDELETE 10.0.0.102:9200/filebeat-6.5.3-2018.12.14   #删除索引数据
{"acknowledged":true}
[[email protected] ~]#
[[email protected] ~]#
[[email protected] ~]#  curl 10.0.0.102:9200/_cat/indices
green open .kibana_1 udOUvbprSnKWUJISwD0r_g 1 0 4 0 46.7kb 46.7kb
[[email protected] ~]# 

6、查看kibana界面收集的日志

当刷新Apache首页,然后kibana的management页面会生成新的索引。再到kibana界面创建新的filebeat-*索引,然后查看kibana界面的日志,json格式收集成功:

图表绘制

1、选择Visualize

2、点击“Create a visualization”

3、选择要创建的图形。这里选择的是饼图

4、选择绘制饼图的数据源(这里所有的数据都来自filebeat-*索引,因此选择filebeat-*):

5、选择饼图的展现的方式

如果选择Split Chart,绘制出来的图就是这样的

6、选择绘制饼图的key,就是说根据哪个元素数据来绘制饼图。这里选择的是Apache访问日志的状态码(status)

7、选好之后,可以先选择上面的三角形符号可以预览饼图是否绘制OK,如果OK ,再点击右上角的“save”保存图形

8、保存饼图,Title自定义

添加饼图到dashboard

1、选择Dashboard,创建一个新的dashboard

2、选择“Add”按钮,右边就会弹出来“Add Panels”,可以看到刚刚我们绘制的饼图。选择这个饼图,保存

3、dashboard保存成功之后,再不断的刷新Apache首页,生成更多的状态码,然后就会看到dashboard界面的这个饼图在动态的变化

任务完成。

原文地址:http://blog.51cto.com/10950710/2330594

时间: 2024-08-01 20:36:20

ELK收集Apache的json格式访问日志并按状态码绘制图表的相关文章

Logstash动态模板映射收集Nginx的Json格式的日志

Logstash传输给ES的数据会自动映射为5索引,5备份,字段都为text的的索引.这样基本上无法进行数据分析.所以必须将Logstash的数据按照既定的格式存储在ES中,这时候就要使用到ES模板技术了.在ES中可以定义自定义模板和动态模板,之后es会自动将相关索引映射为模板规定的格式 编译动态映射模板文件bigdata.template: 在Json日志文件中的KEY的位置不固定.或字段数不明确时使用动态映射模板 { "template": "bigdata-templa

ELK之六-----logstash结合redis收集系统日志和nginx访问日志

一.logstash结合redis收集系统日志 架构图: 环境准备: A主机:elasticsearch主机     IP地址:192.168.7.100 B主机:logstash主机            IP地址:192.168.7.102 C主机:redis主机                IP地址:192.168.7.103 D主机:logstash主机/nginx主机          IP地址:192.168.7.101 1.安装并配置redis 1.安装并配置redis服务,并启

http访问过程和web访问时返回状态码介绍

一次完整的http请求处理过程: (1) 建立或处理连接:接收请求或拒绝请求: (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程: (3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息: (4) 访问资源:获取请求报文中请求的资源: (5) 构建响应报文: (6) 发送响应报文: (7) 记录日志: status(状态码): 1xx:100-101, 信息提示: 2xx:200-206, 成功 3xx:300-305, 重定向 4xx:40

slf4j-logback 日志以json格式导入ELK

同事整理的,在此分享.logback,log4j2 等slf4j的日志实现都可以以json格式输出日志, 这里采用的是logback.当然也可以以文本行的格式输出,然后在logstash里通过grok解析,但是直接以json格式输出,在logstash处理时效率会高一点. Logback 输出 Json格式日志文件 为了让 logback 输出JSON 格式的日志文件,需要在pom.xml 加入如下依赖 <dependency>    <groupId>net.logstash.l

ELK收集日志到mysql

场景需求 在使用ELK对日志进行收集的时候,如果需要对数据进行存档,可以考虑使用数据库的方式.为了便于查询,可以同时写一份数据到Elasticsearch 中. 环境准备 CentOS7系统: 192.168.20.60 node1 Kibana ES Logstash Nginx 192.168.20.61 node2 ES MariaDB这里使用收集Nginx日志到数据库和ES中作为示例. 配置数据库 安装好数据库后,配置,并授权: MariaDB [(none)]> create data

四十一、Apache用户认证、域名跳转、Apache访问日志

一.Apache用户认证 功能是用户在访问网站时,需要输入用户名和密码才能进入网站.一些重要站点或网站后台通常加用户认证,目的是保证安全. # vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <VirtualHost *:80> DocumentRoot "/data/wwwroot/111.com" ServerName 111.com ServerAlias www.example.com <Direct

JSON格式的属性访问 - 点号或者中括号

1. json格式-访问Json属性名.属性值 <script> //JSON格式的attr访问 - 点号或者中括号 -注意:中括号里面可以放变量 var imgData={ "name":"图片描述和图片相对路径", "title":"logo图片","url":"logo.png" }; alert( imgData.name ); alert( imgData[&quo

LAMP架构(apache访问日志不记录静态文件,静态元素过期时间,apache日志切割)

一.apache访问日志不访问静态文件 浏览器打开后按f12会会出现一个界面,点network,会出现很多请求,访问日志里会记载,有些静态的图片或者文件也会记载,太浪费磁盘空间和磁盘io.所以我们要让日志不记录静态文件 [[email protected] ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf SetEnvIf Request_URI ".*\.gif$" img SetEnvIf Request_URI &

elk收集nginx日志

一 :客户端logstash.conf配置文件 input { file { path => "/usr/local/nginx/logs/access.log" type => "nginxlog" start_position => "beginning" # sincedb_path => "/home/logstash/sincdb.nginxlog" } } filter{ if [type]