ELK分析Apache访问日志并生成图像

一、背景

我们的ELK架构如下图所示,各个应用节点日志直接通过rsyslog实时传输到Logstash节点,Logstash对生成的各节点日志文件做处理后传输到Elashticsearch。

二、 logstash配置文件

input部分

input {
file {  type => "apache_log"
path => [
"/opt/data/logs/idca-web1-172.16.3.2/apache_access.log",
"/opt/data/logs/idca-web1-172.16.3.2/apache_ssl_request.log"
           ]
    stat_interval => 1
    discover_interval => 1
start_position=>"end"
sincedb_path => "/dev/null"
    }
}

filter部分

filter {
  if [type] == "apache_log" {
    grok {
      patterns_dir => ["/usr/local/logstash/etc/conf.d/patterns/httpd"]
      match => { "message" => "%{HTTPDLOG}" }
        }
    geoip {
      source => "clientip"
      target => "geoip"
      add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"]
      add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]
      remove_field => ["[geoip][longitude]","[geoip][latitude]"]
        }
    mutate {
      convert => [ "[geoip][coordinates]", "float" ]
      convert => [ "response","integer" ]
      convert => [ "bytes","integer" ]
      convert => [ "usetime","integer" ]
      remove_field => "message"
        }
    date {
      match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
        }

    mutate {
      remove_field => "timestamp"
        }
  }
}

#geiop配置部分使用add_field添加了一个坐标字段,使用remove_field删除了多余的经度、纬度坐标。
#第一个mutate配置使用convert转换了部分字段的类型,使用remove_filed删除了message字段,message字段是原日志内容,已经分配到了各个字段,所以是多余的直接删除。
#GeoIP 库数据较多,如果你不需要这么多内容,可以通过 fields 选项指定自己所需要的。下例为全部可选内容:

geoip {
  fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"]
}

output部分

output {
if [type] == "apache_log" {
elasticsearch {
hosts => ["172.16.1.25","172.16.1.26","172.16.1.27"]
      index => ‘logstash-apache-%{+YYYY-MM-dd}‘
      codec=>plain{charset=>"UTF-8"}
   }
}

#注意:index索引的名称要以logstash开头,否则kibana在生成地图选择field类型时会报“No Compatible Fields: The “[*****]YYYY-MM” index pattern does not contain any of the following field types: geo_point”的错误。

patterns部分

HTTPDLOG %{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"%{DATA:referrer}\"  %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{NUMBER:usetime} \"%{DATA:agent}\"

#根据日志格式形成正则表达式,logstash有大量的内置变量,直接套用即可,如果某些字段不能正确匹配,可以使用DATA变量(代表任意字符)。
#logstash默认pattern目录为/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns,在里面也可找到logstash自带的正则表达式。

三、Kibana图形化

Elashticsearch不需要其他额外配置,重启Logstash后,Kibana中便可发现日志,利用以上配置文件,得到的字段包括:

绘制visualize

例1:统计日访排名前5的城市

例2:统计排名前5的城市访问对多的URI

例3:访问排名前10位外国国家以及对应IP

最后,将绘制的visualize都添加到dashboard中,做统一展示:

参考:
Kibana的图形化-Tile
Logstash自带正则表达式

原文地址:http://blog.51cto.com/fengjicheng/2311916

时间: 2024-10-16 12:50:04

ELK分析Apache访问日志并生成图像的相关文章

Spark-再次分析Apache访问日志

分析日志的包 自己编译下: sbt compile sbt test sbt package ApacheLogParser.jar 对于访问日志简单分析grep等利器比较好,但是更复杂的查询就需要Spark了. 代码: import com.alvinalexander.accesslogparser._ val p = new AccessLogParser val log = sc.textFile("log.small") //log.count //分析Apache日志中40

配置apache访问日志和日志切割

配置apache访问日志和日志切割 1.打开apache主配置文件,命令:vim /usr/local/apache2/conf/httpd.conf,找到log_config_module模块,可以看到两条logformat(日志格式),如下图所示: 2.添加自定义的logformat(日志格式),命名为aming如下图所示: 保存退出! 3.打开虚拟主机配置文件,命令:vim /usr/local/apache2/conf/extra/httpd-vhosts.conf,找到<Virtual

LAMP架构(apache用户认证,域名重定向,apache访问日志)

一.apache用户认证 用户认证就是打开一个网站.会让你输入用户名和密码.对了才会让你访问HTTP, vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 编辑内容如下 <Directory /data/wwwroot/www.123.com> //指定认证的目录 AllowOverride AuthConfig //这个相当于打开认证的开关 AuthName "123.com user auth" //自定义认证的名

11.18 Apache用户认证11.19 11.20 域名跳转11.21 Apache访问日志

11.18 Apache用户认证更改虚拟主机内容vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf增加用户名与密码? /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming-c是创建 -m指定类型查看生成的密码文档内容上面已经他去了.htpasswd目录,再创建用记就不需要-c在wi上指定域名hostsC:\Windows\System32\drivers\etc认证:没有

采集并分析Nginx访问日志

日志服务支持通过数据接入向导配置采集Nginx日志,并自动创建索引和Nginx日志仪表盘,帮助您快速采集并分析Nginx日志. 许多个人站长选取了Nginx作为服务器搭建网站,在对网站访问情况进行分析时,需要对Nginx访问日志统计分析,从中获取网站的访问量.访问时段等访问情况.传统模式下利用CNZZ等方式,在前端页面插入js,用户访问的时候触发js,但仅能记录访问请求.或者利用流计算.离线统计分析Nginx访问日志,但需要搭建一套环境,并且在实时性以及分析灵活性上难以平衡. 日志服务在支持查询

ip列表中找到具体某个ip的所有访问日志并生成对应的文件

#!/bin/sh # 功能:从ip列表中找到具体某个ip的所有访问日志并生成对应的文件 #      # mkdir  handle > com.ip.txt function handle(){         #echo "egrep "$1"  0602.log  > handle/$n.txt"         egrep "$1"  0602.log  > handle/$1.txt         time=`wc

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 &

今晚九点|如何使用 Python 分析 web 访问日志?

主题:如何使用 Python 分析 Web 访问日志 内容 Python 基础 字符串.字典.文件.时间 Web 访问日志 实战 提问 主讲师:KK 多语言混搭工程师,热爱开源技术,喜欢GET新技能,5年 PHP.Python 项目开发经验,带领团队完成多个中.小型项目开发,对安全.云等多个领域富有浓厚兴趣,擅长于 WEB 安全开发.性能优化.分布式应用开发&设计等多方面,做事认真负责,乐于分享技能,现任 51Reboot.com Python 实战班讲师 任何语言都有使用场景,只有合适和不合适

LAMP(5)域名跳转、Apache访问日志、访问日志不记录静态文件、访问日志切割

                            域名跳转    SEO(Search Engine Optimization)搜索引擎优化是一种利用搜索引擎的搜索规则来提高目前网站在有关搜索引擎内的自然排名的方式.SEO的目的理解是:为网站提供生态式的自我营销解决方案,让网站在行业内占据领先地位,从而获得品牌收益   一个网站是通过域名来判断的.   域名跳转:定义一个状态码,301永久重定向(通常都是同301,会降低原来域名权重,把权重定义到新的域名.)