ELK收集tomcat访问日志并存取mysql数据库案例
这个案例中,tomcat产生的日志由filebeat收集,然后存取到redis中,再由logstash进行过滤清洗等操作,最后由elasticsearch存储索引并由kibana进行展示。
1、配置tomcat自定义日志
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".log"
pattern="{"client_ip":"%{X-Forwarded-For}i","direct_ip":"%a","client user":"%l","authenticated":"%u","timestamp":"%{yyyy-MM-dd HH:mm:ss Z}t","request_method":"%m","URI":"%U","Protocol":"%H","status":"%s","send bytes":"%B","Query?string":"%q","Referer":"%{Referer}i","Agent version":"%{User-Agent}i"}"/>
需要注意的是第一个X-Forwarded-For表示获取一个ip列表,但只有第一个ip是真正的客户端ip,不过如果没有代理,直接访问tomcat,真正的ip是direct_ip。还有一个是时间格式,这里采用自定义时间格式,没有使用“%t”参数。
2、配置filebeat
- type: log # Change to true to enable this input configuration.
enabled: true # Paths that should be crawled and fetched. Glob based paths.
paths:
- /usr/local/tomcat/logs/localhost_access_log.*.log
#- c:\programdata\elasticsearch\logs\*
document_type: tomcat-accesslog
output.redis:
enable: true
hosts: ["172.16.0.54:6379"]
db:
timeout:
key: tomcat_accesslog_filter_index
password:
3、配置mysql
1)安装mariadb-server以及创建用户并授权访问mysql(最好不使用root用户)。
2)安装驱动步骤
先下载mysql-connector-java驱动:wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
然后在/usr/local/logstash/vendor目录下创建目录“(我这里是源码安装的logstash)
mkdir -pv /usr/local/logstash/vendor/jar/jdbc
将上面的mysql驱动包(带有bin关键字的那个)移动到此目录下。
3)安装gem
yum install gem -y
然后配置gem源
gem sources --remove https://rubygems.org/ //或者
gem sources --add http://gems.ruby-china.com/
最后安装插件
cd /usr/local/logstash/bin
./logstash-plugin install logstash-output-jdbc
最后验证是否安装成功
/usr/local/logstash/bin/logstash-plugin | grep jdbc
[root@ELK-chaofeng07 logstash]# /usr/local/logstash/bin/logstash-plugin list | grep jdbc
logstash-input-jdbc
logstash-output-jdbc
4)进行配置logstash的配置文件,以.conf结尾即可
input{
redis {
host =>"172.16.0.54"
port =>
data_type => "list"
db => ""
password => ""
key => "tomcat_accesslog_filter_index"
codec => "json"
add_field => {
"[@metadata][mytomcat]" => "tomcat_accesslog_filter_log"
}
}
} filter {
if [@metadata][mytomcat] == "tomcat_accesslog_filter_log" {
mutate {
gsub => ["message","\\x","\\\x"]
}
if ( 'method":"HEAD' in [message] ) {
drop{}
}
json {
source => "message"
add_field => {"[@metadata][direct_ip]" => "%{direct_ip}"}
remove_field => "message"
remove_field => "prospector"
remove_field => "beat"
remove_field => "host"
remove_field => "input"
remove_field => "source"
remove_field => "offset"
remove_field => "fields"
remove_field => "@version"
}
date {
match => [ "timestamp","yyyy-MM-dd HH:mm:ss Z" ]
}
mutate {
split => ["client_ip",","]
}
mutate {
convert => ["body_bytes_sent","integer"]
convert => ["total_bytes_sent","integer"]
}
mutate {
replace => { "client_ip" => "%{client_ip[0]}"}
}
if [client_ip] == "-" {
if [@metadata][direct_ip] not in ["%{direct_ip}","-"]{
mutate {
replace => { "client_ip" => "%{direct_ip}" }
}
} else {
drop {}
}
}
geoip {
source => "client_ip"
target => ["geoip"]
add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}"]
add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"]
}
mutate {
convert => ["[geoip][coordinates]","float"]
}
mutate {
remove_field => ["direct_ip"]
remove_field => ["timestamp"]
}
}
}
output{
if "_grokparsefailure" not in [tags] and "_dateparsefailure" not in [tags] and "_geoip_lookup_failure" not in [tags] {
jdbc{
connection_string => "jdbc:mysql://172.16.0.57:3306/elk?user=chaofeng&password=123456&useUnicode=true&characterEncoding=UTF8"
statement => ["INSERT INTO elklog(client_ip)VALUES(?)","client_ip"]
}
stdout{
codec => rubydebug
}
}
5)在mysql中创建数据库和表以及表结构
创建的数据库是:elk
创建的表是:elklog
表结构如下:
MariaDB [elk]> desc elklog;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| client_ip | varchar() | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
row in set (0.01 sec)
(6)效果图
难点:tomcat中的时间最好也进行自定义格式化,不然不好整
ELK收集tomcat访问日志并存取mysql数据库案例的更多相关文章
- ELK之收集tomcat访问日志
把tomcat访问日志转换成json格式然后收集 修改配置文件conf/server.xml把日志输出改成json格式 添加logstash配置文件(日志按天切割可以使用*进行匹配所有)
- elk收集tomcat的日志
logstash收集tomcat的日志 不要修改下tomcat中server.xml的日志格式,否则tomcat无法启动,试过多次,不行,就用自带的日志让logstash去收集 首先给tomcat日志 ...
- ELK收集tomcat状态日志
1.先查看之前的状态日志输出格式:在logs/catalina.out这个文件中 最上面的日志格式我们可能不太习惯使用,所以能输出下面的格式是最好的,当然需要我们自定义日志格式,接下来看看如何修改 2 ...
- elk收集tomcat日志
1.elk收集tomcat普通日志: 只在logstash节点增加如下文件,重启logstash即可: cat >>/home/logstash-6.3.0/config/tomcat_t ...
- ELK 收集 Tomcat日志以及修改Tomcat日志格式
ELK 收集 Tomcat日志以及修改Tomcat日志格式 Tomcat日志 想要收集tomcat 日志 首先我们要对tomcat的日志有足够的了解 tomca日志分类 简单的说tomcat logs ...
- logstash收集nginx访问日志
logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...
- Tomcat访问日志详细配置
在server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.AccessLogValve&q ...
- linux系统tomcat项目部署和tomcat访问日志
一.只用ip地址访问 先把端口号改成80,然后用 <Host name="localhost" appBase="webapps" 137 ...
- Tomcat访问日志详细配置(转)
在server.xml里的<host>标签下加上<Valve className="org.apache.catalina.valves.AccessLogValve&qu ...
随机推荐
- 伪指令 ENTRY 与 END
ENTRY ENTRY 是程序入口伪指令.在一个完整的汇编程序中至少有一个 ENTRY,编译程序在编译连接时依据程序入口进行连接.在只有一个入口时,编译程序会把这个入口的地址定义为系统复位后的程序起始 ...
- SpringBoot系列——EnableScheduling,对定时器的支持
前言 定时器功能在项目里面往往会用到,比如定时发送邮件.定时释放数据库资源:这里记录一下springboot对定时器的支持的简单实例 cron表达式 开始之前要先介绍一下cron表达式,这里当一下百度 ...
- C#.NET和C++结构体Socket通信与数据转换
最近在用C#做一个项目的时候,Socket发送消息的时候遇到了服务端需要接收C++结构体的二进制数据流,这个时候就需要用C#仿照C++的结 构体做出一个结构来,然后将其转换成二进制流进行发送,之后将响 ...
- c# 模拟网易足彩算法
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- T-SQL :SQL Server系统数据库(二)
master:master数据库储存实例范围的元数据信息,服务器配置,实例中的所有数据库信息和初始化信息. Resource:Resource数据库是一个隐藏,只读数据库,存储所有系统对象的定义.当查 ...
- PHP程序员解决问题的能力
这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验.如果解决问题能 ...
- SpringBoot零XML配置的Spring Boot Application
Spring Boot 提供了一种统一的方式来管理应用的配置,允许开发人员使用属性properties文件.YAML 文件.环境变量和命令行参数来定义优先级不同的配置值.零XML配置的Spring B ...
- Java web.xml笔记
Javaweb项目中, web.xml文件其中的各种设置, 就是简单的标注 <?xml version="1.0" encoding="UTF-8"?&g ...
- JVM虚拟机深入理解+GC回收+类加载
旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81455449 一,前言 本文章是读了“深入理 ...
- MVC模式-----struts2框架(2)
MVC模式-----struts2框架 第一个struts2程序 struts2框架是通过一个过滤器将struts2集成到Web应用程序中的,这个过滤器的对象是StrutsprepareAndExec ...