收集 Tomcat 日志

安装 Tomcat

# 安装 jdk
[root@web01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm # 下载
[root@web01 ~]# wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.0-M7/bin/apache-tomcat-10.0.0-M7.tar.gz # 解压
[root@web01 ~]# tar xf apache-tomcat-10.0.0-M7.tar.gz -C /usr/local/ # 做软连接
[root@web01 ~]# ln -s /usr/local/apache-tomcat-10.0.0-M7 /usr/local/tomcat # 启动 Tomcat
[root@web01 ~]# /usr/local/tomcat/bin/startup.sh # 6.访问页面 10.0.0.7:8080

收集 Tomcat 访问日志(Access-log)

Tomcat 访问日志(Access-log)的格式在 server.xml 中可以直接修改,先修改访问格式的日志试试水 ~ ~ ~

# 把原来的日志格式注释,添加我们的格式
[root@web01 ~]# vim /usr/local/tomcat/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".log"
pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/> # 重启 tomcat
[root@web01 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@web01 ~]# /usr/local/tomcat/bin/startup.sh # 配置收集新的 tomcat 日志
[root@web01 ~]# vim /etc/logstash/conf.d/tomcat_json_es.conf
input {
file {
path => "/usr/local/tomcat/logs/localhost_access_log.*.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "tomcat_json_%{+YYYY-MM-dd}"
}
}

收集 Tomcat 服务运行日志(Catalina-log)

一般我们会收集 Tomcat 服务运行日志(Catalina-log),当遇到报错时,一条报错会被分割成很多条数据,不方便查看,解决方法:

①. — 修改 Tomcat 的 Catalina 日志格式为 Json

​ — 1)开发修改输出日志为 Json

​ — 2)修改 Tomcat 配置,日志格式为 Json

②. — 使用 Logstash 的 input 插件下的 mutiline 模块

下面使用第二种方法,即 mutiline 模块实现服务运行日志的切分

Mutiline 模块初识

# 使用 mutiline 模块
[root@web01 ~]# vim /etc/logstash/conf.d/test_mutiline.conf
input {
stdin {
codec => multiline {
# 匹配以 `[` 开头
pattern => "^\["
# 匹配到
negate => true
# 向上合并,向下合并是 next
what => "previous"
}
}
}
output {
stdout {
codec => "json"
}
} # 测试,输入内容不会直接输出,当遇到以 [ 开头才会收集以上的日志
[root@web01 ~]# logstash -f /etc/logstash/conf.d/test_mutiline.conf
......
...
]
A
B
C
D
[
{"tags":["multiline"],"host":"web01","@timestamp":"2020-08-14T02:30:33.906Z","message":"[\n]\nA\nB\nC\nD","@version":"1"}
a
b
c
d
e
f
g
[
{"tags":["multiline"],"host":"web01","@timestamp":"2020-08-14T02:28:58.590Z","message":"[\na\nb\nc\nd\ne\nf\ng","@version":"1"}

收集 Tomcat 错误日志(Catalina-log)

# 收集 catalina 错误日志
[root@web01 conf.d]# vim /etc/logstash/conf.d/catalina_out.conf
input {
file {
path => "/usr/local/tomcat/logs/catalina.*.log"
start_position => "beginning"
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
}
}
} output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "catalina_%{+YYYY-MM-dd}"
codec => "json"
}
}

追加 Tomcat 错误日志(Catalina-log)

# 测试,手动添加一些错误的日志,到 Catlina 日志中
[root@web01 ~]# cat tomcat_error.log >> /usr/local/tomcat/logs/catalina.2020-08-14.log

收集 Nginx 日志

安装 Nginx

[root@web01 ~]# yum install -y nginx

收集 Nginx 访问日志(Access-log)

# 配置 nginx 访问日志格式
[root@web01 ~]# vim /etc/nginx/nginx.conf
... ...
http {
log_format json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}'; access_log /var/log/nginx/access.log json;
... ... # 配置收集访问日志
[root@web01 ~]# vim /etc/logstash/conf.d/nginx_json.conf
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "nginx_json_%{+YYYY-MM-dd}"
}
}

收集 Nginx 错务日志(Error-log)

Nginx 中的错误日志不会像 Tomcat 中的错误日志一样分成很多行,只需要正常的配置,按行切分

将获取日志参数分离(方法一)

拆分 message 字段

[root@web01 ~]# vim /etc/logstash/conf.d/tomcat_json_es.conf
input {
file {
path => "/usr/local/tomcat/logs/localhost_access_log.*.log"
start_position => "beginning"
}
} # 把收集到的数据进行处理
filter {
json {
# 将 message 字段中的键值对,拆分成为索引文档中的字段
source => "message"
}
} output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "tomcat_json_%{+YYYY-MM-dd}"
}
}

移除 message 字段

因为将 Message 字段拆分到文档字段后,就不需要 Message 字段数据了,所以需要将 Message 字段移除:

# message 数据已经拆分,数据还在,去掉 message 数据
filter {
json {
source => "message"
remove_field => ["message"]
}
}

将获取日志参数分离(方法二)

# 最方便的方法,只需要一行 codec => "json"
# file 中的日志格式一定要是 Json 格式
[root@web01 ~]# vim /etc/logstash/conf.d/nginx_json.conf
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
codec => "json"
}
}
output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "nginx_json_%{+YYYY-MM-dd}"
}
}

综合 Logstash 配置

编辑 Logstash 配置文件

# 收集 catalina 服务启动(及报错)日志
[root@web01 conf.d]# cat catalina_out.conf
input {
file {
path => "/usr/local/tomcat/logs/catalina.*.log"
start_position => "beginning"
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
}
}
} output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "catalina_%{+YYYY-MM-dd}"
codec => "json"
}
} # 收集 nginx 、tomcat 访问日志
[root@web01 conf.d]# cat nginx_tomcat.conf
input {
file {
type => "nginx_log"
path => "/var/log/nginx/access.log"
start_position => "beginning"
codec => "json"
}
file {
type => "tomcat_log"
path => "/usr/local/tomcat/logs/localhost_access_log.*.log"
start_position => "beginning"
codec => "json"
}
} output {
elasticsearch {
hosts => ["10.0.0.121:9200"]
index => "%{type}_%{+YYYY-MM-dd}"
}
}

启动 Logstash 多实例

[root@web01 conf.d]# logstash -f /etc/logstash/conf.d/nginx_tomcat.conf  &
[root@web01 conf.d]# logstash -f /etc/logstash/conf.d/catalina_out.conf --path.data=/data/logstash/catalina/ &

收集日志到 Redis

安装 Redis(略)

配置输出数据到 Redis

[root@web01 ~]# vim /etc/logstash/conf.d/nginx_to_redis.conf
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
codec => "json"
}
}
output {
redis {
host => "172.16.1.121"
port => "6379"
data_type => "list"
db => "0"
key => "nginx_log"
}
}

Logstash 日志收集(补)的更多相关文章

  1. es redis logstash 日志收集系统排错

    用logstash收集日志并发送到redis,然后通过logstash取redis数据写入到es集群,最近kibana显示日志总是中断,日志收集不过来,客户端重启发现报错: Failed to sen ...

  2. springmvc项目 logback.xml配置 logstash日志收集

    配置logback,需要一个转接的Appender,可以通过Maven依赖加到项目中: <dependency> <groupId>com.cwbase</groupId ...

  3. ELK Stack 介绍 & Logstash 日志收集

    ELK Stack 组成 Software Description Function E:Elasticsearch Java 程序 存储,查询日志 L:Logstash Java 程序 收集.过滤日 ...

  4. StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程)

    @ 目录 StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程) 一.下载ELK的安装包上传并解压 1.Elasticsearch下载 2.Logstash下载 3.Kibana ...

  5. 用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

    用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana ...

  6. ELK日志收集分析系统配置

    ELK是日志收益与分析的利器. 1.elasticsearch集群搭建 略 2.logstash日志收集 我这里的实现分如下2步,中间用redis队列做缓冲,可以有效的避免es压力过大: 1.n个ag ...

  7. ELK分布式日志收集搭建和使用

    大型系统分布式日志采集系统ELK全框架 SpringBootSecurity1.传统系统日志收集的问题2.Logstash操作工作原理3.分布式日志收集ELK原理4.Elasticsearch+Log ...

  8. 日志收集系统ELK搭建

    一.ELK简介 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下.因此我们需要集中化的管理 ...

  9. ELK 日志收集系统

    传统系统日志收集的问题 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下. 通常,日志被分 ...

随机推荐

  1. kubernets之Deployment资源

    一  声明式的升级应用 1.1  回顾一下kubernets集群里面部署一个应用的形态应该是什么样子的,通过一副简单的图来描述一下 通过RC或者RS里面的模板创建了三个pod,之后通过一个servci ...

  2. [XAML] 使用 XAML 格式化工具:XAML Styler

    1. XAML 的问题 刚入门 WPF/UWP 之类的 XAML 平台,首先会接触到 XAML 这一新事物.初学 XAML 时对它的印象可以归纳为一个词:一坨. 随着我在 XAML 平台上工作的时间越 ...

  3. sap alv grid 中的delete按键问题

    今天发先一个问题,在使用ALV输出的时候,如果有字段设置为可编辑状态,则会在前面出现选择条,并且,当我们选择一行或者多行的时候,可以用键盘上的DELETE键将行删除!呵呵

  4. ubuntu20.04并添加桌面快捷方式,以安装火狐可浏览器开发版(水狐)为例

    @参考原文 1. 下载linux版源文件 从火狐官网下载linux版的水狐源文件压缩包,@火狐浏览器开发版(水狐)下载地址. 2. 解压下载源文件 将下载的"tar.bz2"文件解 ...

  5. mysqlG基于TID模式同步报错 (Last_IO_Errno: 1236)

    mysqlG基于TID模式同步报错Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading da ...

  6. 详解SpringMVC

    详解SpringMVC 一.什么是MVC? ​ MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范.就是将业务逻辑.数据.显示分离的方法来组织代码. ...

  7. Hash Join: Basic Steps

    Joins https://docs.oracle.com/database/121/TGSQL/tgsql_join.htm#TGSQL242 tidb/index_lookup_hash_join ...

  8. redis中的小秘密和持久化小细节

    https://www.jianshu.com/p/36c301ac87df 持久化的情况 https://www.cnblogs.com/wdliu/p/9377278.html 集群搭建 主从  ...

  9. 【rz】【sz】参数详解

    参数 SYNOPSIS sz [-+8abdefkLlNnopqTtuvyY] file ... b:以二进制方式,默认为文本方式 e:对所有控制字符转义 待续 常见问题: 1.xshell 使用rz ...

  10. PostgreSQL创建只读权限的用户

    1.创建只读角色 CREATE ROLE readaccess; 2.授予对现有表的访问权限 GRANT USAGE ON SCHEMA public TO readaccess; GRANT SEL ...