ELK 日志分析实例

网海过客
www.chinasa.net

ELK 日志分析实例
一、ELK-web日志分析
二、ELK-MySQL 慢查询日志分析
三、ELK-SSH登陆日志分析
四、ELK-vsftpd 日志分析

一、ELK-web日志分析

通过logstash grok正则将web日志过滤出来,输出到Elasticsearch 搜索引擎里,通过Kibana前端展示。

 1.png

1.1、创建logstash grok 过滤规则

#cat ./logstahs/patterns/nginx

NGINXACCESS %{IPORHOST:remote_addr} – – \[%{HTTPDATE:time_local}\] "%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent}

1.2、创建logstash web日志配置文件

#cat ./logstash/conf/ngx_log.conf

input {
        file {
                type => "nginx_log"
                path => "/opt/nginx/logs/access.log"
        }
}  
filter {
  if [type] == "nginx_log" {
    grok {
      match => { "message" => "%{NGINXACCESS}" }
    }
    geoip {
      source => "remote_addr"
      target => "geoip"
      database => "/opt/logstash-2.0.0/conf/GeoLiteCity.dat"
      add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
      convert => [ "[geoip][coordinates]","float", "body_bytes_sent","float", \
          "body_bytes_sent.raw","float"]
    }
  }
}

output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "elk.test.com:9200"
        index => "ngx_log-%{+YYYY.MM}"
    }
}

1.3、创建Kibana图形

统计httpcode状态码

选择【Visualize】菜单,选择 Pie chart】选项。字段选择status.raw,如下图所示:

2.png

统计访问前50 IP

选择【Visualize】菜单,选择 Vertical bar chart】选项。字段选择remote_addr.raw,如下图所示:

3.png


统计 403-405 状态码

选择【Visualize】菜单,选择 Line chart】选项。字段选择status.raw,如下图所示:

4.png

其它图形统计,就不详细举例了。

详细图形展示如下:

5.png

6.png

7.png

二、ELK-MySQL 慢查询日志分析

2.1、创建logstash grok 过滤规则

#cat ./logstahs/patterns/mysql_slow

MYSQLSLOW "# User@Host: %{WORD:user}\[%{WORD}\] @ (%{HOST:client_hostname}|) \[(%{IP:client_ip}|)\]",
"# Thread_id: %{NUMBER:thread_id:int} \s*Schema: (%{WORD:schema}| ) \s*Last_errno: \
%{NUMBER:last_errno:int} \s*Killed: %{NUMBER:killed:int}",
"# Query_time: %{NUMBER:query_time:float} \s*Lock_time: %{NUMBER:lock_time:float} \
\s*Rows_sent: %{NUMBER:rows_sent:int} \s*Rows_examined: %{NUMBER:rows_examined:int}",
"# Bytes_sent: %{NUMBER:bytes_sent:int}",
"(?m)SET timestamp=%{NUMBER:timestamp};%{GREEDYDATA:mysql_query}"

2.2、创建logstash MySQL-Slow慢查询配置文件

#cat ./logstash/conf/MySQL-Slow.conf

input {
  file {
    type => "mysql-slow"
    path => "/var/log/mysql_slow_log.log"  
  }
}  
filter {
if [type] == "mysql-slow" {  
multiline {
    pattern => "^#|^SET"
    negate => true
    what => "previous"
}  
grok {
    match => { "message" => "%{MYSQLSLOW}"  }
}
mutate {
         gsub => [ "mysql_query", "\n", " " ]
         gsub => [ "mysql_query", "  ", " " ]
         add_tag => "mutated_mysql_query"
}
multiline {
    pattern => "(# User|# Thread|# Query|# Time|# Bytes)"
    negate => false
    what => "next"
}
date {
    match => [ "timestamp","UNIX" ]
}
mutate {
    remove_field => [ "timestamp" ]
}
}
}  
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "elk.test.com:9200"
        index => "mysql_slow_log-%{+YYYY.MM}"
    }
}

2.3、详细图形展示如下:

8.png

三、ELK-SSH登陆日志分析

3.1、创建logstash grok 过滤规则

#cat ./logstahs/patterns/ssh

SECURELOG %{WORD:program}\[%{DATA:pid}\]: %{WORD:status} password for ?(invalid user)? %{WORD:USER} from %{DATA:IP} port

SYSLOGPAMSESSION %{SYSLOGBASE} (?=%{GREEDYDATA:message})%{WORD:pam_module}\(%{DATA:pam_caller}\): session %{WORD:pam_session_state} for user %{USERNAME:username}(?: by %{GREEDYDATA:pam_by})?

SYSLOGBASE2 (?:%{SYSLOGTIMESTAMP:timestamp}|%{TIMESTAMP_ISO8601:timestamp8601}) (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:


3.2、创建logstash ssh配置文件

#cat ./logstash/conf/ssh.conf

input {
    file {
        type => "seclog"
        path => "/var/log/secure"
   }
}
filter {
if [type] == "seclog" {
    grok {
        match => { "message" => "%{SYSLOGPAMSESSION}" }
        match => { "message" => "%{SECURELOG}" }
        match => { "message" => "%{SYSLOGBASE2}" }
    }
    geoip {
        source => "IP"
        fields => ["city_name"]
        database => "/opt/logstash-2.0.0/conf/GeoLiteCity.dat"
    }
    if ([status] == "Accepted") {
        mutate {
        add_tag => ["Success"]
        }
    }
    else if ([status] == "Failed") {
        mutate {
        add_tag => ["Failed"]
        }
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "elk.test.com:9200"
        index => "sshd_log-%{+YYYY.MM}"
    }
}

PS:添加状态标签,便于Kibana 统计

if ([status] == "Accepted") {              #判断字段[status]值,匹配[Accepted]
        mutate {
        add_tag => ["Success"]      #添加标签[Success]
        }
}
else if ([status] == "Failed") {           #判断字段[status]值,匹配[Failed]
        mutate {
        add_tag => ["Failed"]       #添加标签[Failed]
        }
}


3.3、详细图形展示如下:

9.png

四、ELK-vsftpd 日志分析

4.1、创建logstash grok 过滤规则

#cat ./logstahs/patterns/vsftpd

VSFTPDCONNECT \[pid %{WORD:pid}\] %{WORD:action}: Client \"%{DATA:IP}\"
VSFTPDLOGIN \[pid %{WORD:pid}\] \[%{WORD:user}\] %{WORD:status} %{WORD:action}: Client \"%{DATA:IP}\"VSFTPDACTION \[pid %{DATA:pid}\] \[%{DATA:user}\] %{WORD:status} %{WORD:action}: Client \"%{DATA:IP}\", \"%{DATA:file}\", %{DATA:bytes} bytes, %{DATA:Kbyte_sec}Kbyte/sec 

4.2、创建logstash vsftpd配置文件

#cat ./logstash/conf/vsftpd.conf

input {
    file {
        type => "vsftpd_log"
        path => "/var/log/vsftpd.log"
    }
}
filter {
    if [type] == "vsftpd_log" {
        grok {
            match => { "message" => "%{VSFTPDACTION}" }
            match => { "message" => "%{VSFTPDLOGIN}" }
            match => { "message" => "%{VSFTPDCONNECT}" }
        }
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "elk.test.com:9200"
        index => "vsftpd_log-%{+YYYY.MM}"
    }
}

4.3、详细图形展示如下:

10.png

原创文章,作者:wubin,如若转载,请注明出处:http://www.178linux.com/17395

(24)
wubinwubin
上一篇 2016-06-03 09:19
下一篇 2016-06-03 12:42

相关推荐

  • inode 与 block

    iNode:索引节点(index node) iNode是用来存储数据属性信息的,iNode包含的属性包括:文件大小属组归属的用户组读写权限文件类型修改时间指向文件实体的指针功能(iNode节点和block的对应关系)但是,iNode不包括文件名 iNode小结: 磁盘分区格式化为ext4文件系统后会生成一定数量的iNode和block iNode是索引节点…

    Linux干货 2017-07-18
  • Mariadb数据库复制系列(一):主从复制

      实验一:MySQL主从复制的实现 1、实验环境 确保各节点之间的时间同步 2、修改主节点的mysql服务配置文件,让其符合主从架构中主节点的要求 3、查看主节点现有数据情况和二进制日志使用情况 4、对主节点的数据利用xtrabackup进行完全备份 由于两个从节点是后期加入,故采取备份主节点的数据,还原到从节点上,然后让从节点从备份时刻的二进制日志的位置…

    2016-11-24
  • 在Centos7上源码编译httpd

    在Centos7上源码编译httpd 安装源码包 首先在http://httpd.apache.org下载所需要的安装包 小编在这里下载的是httpd-2.4.27.tar apr-1.6.2.tar apr-util-1.6.0.tar 首先编译安装apr-1.6.2.tar.gz #1 tar -zxf apr-1.6.2.tar.gz #先解压安装包 …

    2017-08-21
  • 马哥教育网络班21第五周练习作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub2/grub.cfg   2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空…

    Linux干货 2016-08-08
  • 自用vim环境参数设置

    基本显示设置 set nu mber 显示行号 syntax on 语法高亮 set cursorline 用浅色高亮当前行 set ruler 显示标尺 set showcmd 输入的命令显示出来,看的清楚些 set cmdheight=1 命令行(在状态行下)的高度,设置为1 set tabst…

    Linux干货 2017-04-24
  • 怎么解决VMware“该虚拟机似乎正在使用中”问题

    1)故障现象:  最近使用vmware workstation测试资料,经常会出现打开虚拟机的时候提示:“该虚拟机正在被使用”,点击“获取所有权”或者“取消”都不能处理问题(一般是没有正常虚拟机导致的)。 2)处理方法: a.查找*.lck文件,然后删除。 b.重启vmware workstation服务 3)参考资料 http://jingyan…

    Linux干货 2016-07-29