利用 Filebeat 收集日志(下)

1、案例: 利用 Filebeat 收集 Tomat 的 Json 格式的访问日志到Elasticsearch

1.1、安装 Tomcat 并配置使用 Json 格式的访问日志

# 安装Tomcat,包安装或二进制安装
root@web02:~# apt install -y tomcat9 tomcat9-admin

root@web02:~# ll /var/lib/tomcat9/
total 20
drwxr-xr-x  5 root   root   4096 Jan  3 11:37 ./
drwxr-xr-x 43 root   root   4096 Jan  3 11:37 ../
lrwxrwxrwx  1 root   root     12 Nov 18 19:07 conf -> /etc/tomcat9/
drwxr-xr-x  2 tomcat tomcat 4096 Nov 18 19:07 lib/
lrwxrwxrwx  1 root   root     17 Nov 18 19:07 logs -> ../../log/tomcat9/
drwxr-xr-x  2 root   root   4096 Jan  3 11:37 policy/
drwxrwxr-x  3 tomcat tomcat 4096 Jan  3 11:37 webapps/
lrwxrwxrwx  1 root   root     19 Nov 18 19:07 work -> ../../cache/tomcat9/
root@web02:~# ll /var/lib/tomcat9/webapps/
total 12
drwxrwxr-x 3 tomcat tomcat 4096 Jan  3 11:37 ./
drwxr-xr-x 5 root   root   4096 Jan  3 11:37 ../
drwxr-xr-x 3 root   root   4096 Jan  3 11:37 ROOT/
root@web02:~# ls /etc/tomcat9/
Catalina             context.xml           logging.properties  server.xml        web.xml
catalina.properties  jaspic-providers.xml  policy.d            tomcat-users.xml
# 修改 Tomcat 的访问日志为Json格式
root@web02:~# vim /etc/tomcat9/server.xml
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"               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;}"/>

root@web02:~# systemctl restart tomcat9.service

# 访问几次tomcat的页面,可以看到如下的Json格式日志
root@web02:~# tail -f /var/lib/tomcat9/logs/localhost_access_log.2023-01-03.txt
{"clientip":"192.168.1.1","ClientUser":"-","authenticated":"-","AccessTime":"[03/Jan/2023:11:43:30 +0000]","method":"GET / HTTP/1.1","status":"200","SendBytes":"1895","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42"}
{"clientip":"192.168.1.1","ClientUser":"-","authenticated":"-","AccessTime":"[03/Jan/2023:11:43:30 +0000]","method":"GET /favicon.ico HTTP/1.1","status":"404","SendBytes":"729","Query?string":"","partner":"http://192.168.1.106:8080/","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42"}
{"clientip":"192.168.1.1","ClientUser":"-","authenticated":"-","AccessTime":"[03/Jan/2023:11:44:27 +0000]","method":"GET / HTTP/1.1","status":"200","SendBytes":"23","Query?string":"","partner":"-","AgentVersion":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42"}

1.2、修改 Filebeat 配置文件

root@web02:~# vim /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/lib/tomcat9/logs/localhost_access_log.*
  json.keys_under_root: true
  json.overwrite_keys: false
  tags: ["tomcat-access"]

- type: log
  enabled: true
  paths:
    - /var/lib/tomcat9/logs/catalina.*
  tags: ["tomcat-error"]

setup.template.settings:
  index.number_of_shards: 1
setup.ilm.enabled: false
setup.template.name: "tomcat"
setup.template.pattern: "tomcat-*"

output.elasticsearch:
  hosts: ["192.168.1.101:9200","192.168.1.102:9200","192.168.1.103:9200"]
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyy.MM.dd}"
      when.contains:
        tags: "tomcat-access"
    - index: "tomcat-error-%{[agent.version]}-%{+yyy.MM.dd}"
      when.contains:
        tags: "tomcat-error"

root@web02:~# systemctl restart filebeat.service

1.3、插件查看索引

图片[1]-利用 Filebeat 收集日志(下)-李佳程的个人主页

1.4、通过 Kibana 查看收集的日志信息

图片[2]-利用 Filebeat 收集日志(下)-李佳程的个人主页
图片[3]-利用 Filebeat 收集日志(下)-李佳程的个人主页
图片[4]-利用 Filebeat 收集日志(下)-李佳程的个人主页
图片[5]-利用 Filebeat 收集日志(下)-李佳程的个人主页

2、案例: 利用 Filebeat 收集 Tomat 的多行错误日志到Elasticsearch

2.1、Tomcat 错误日志解析

Tomcat 是 Java 应用,当只出现一个错误时,会显示很多行的错误日志

root@web02:~# tail /var/lib/tomcat9/logs/catalina.out
12-Jul-2021 14:05:58.190 WARNING [main]
org.apache.catalina.startup.Catalina.parseServerXml Unable to load server
configuration from [/usr/local/apache-tomcat-9.0.64/conf/server.xml]
 org.xml.sax.SAXParseException; systemId: file:/usr/local/apache-tomcat8.5.61/conf/server.xml; lineNumber: 22; columnNumber: 1; Content is not allowed
in prolog.
 at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXPa
rser.java:1243)
 at
com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXPar
serImpl.java:644)
 at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1535)
 at
org.apache.catalina.startup.Catalina.parseServerXml(Catalina.java:617)
 at org.apache.catalina.startup.Catalina.load(Catalina.java:709)
 at org.apache.catalina.startup.Catalina.load(Catalina.java:746)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav
a:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:305)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)
12-Jul-2021 14:05:58.191 SEVERE [main]
org.apache.catalina.startup.Catalina.start Cannot start server, server instance
is not configured

多个行其实是同一个事件的日志的内容,而ES是根据每一行来区别不同的日志

可以将多个行合并成一个日志来解决此问题

2.2、安装 Tomcat 并配置

# 修改 Tomcat 的访问日志格式为 Json

2.3、修改 Filebeat 配置文件

root@web02:~# vim /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/lib/tomcat9/logs/localhost_access_log.*
  json.keys_under_root: true
  json.overwrite_keys: false
  tags: ["tomcat-access"]

- type: log
  enabled: true
  paths:
    - /var/lib/tomcat9/logs/catalina.*
  tags: ["tomcat-error"]
  multiline.type: pattern               # 此为默认值,可省略
  multiline.pattern: '^[0-3][0-9]-'     # 正则表达式匹配以两位,或者为'^\d{2}'

  multiline.negate: true
  multiline.match: after
  multiline.maxlines: 10000             # 默认只合并500行,指定最大合并1万行

setup.template.settings:
  index.number_of_shards: 1
setup.ilm.enabled: false
setup.template.name: "tomcat"
setup.template.pattern: "tomcat-*"

output.elasticsearch:
  hosts: ["192.168.1.101:9200","192.168.1.102:9200","192.168.1.103:9200"]
  indices:
    - index: "tomcat-access-%{[agent.version]}-%{+yyy.MM.dd}"
      when.contains:
        tags: "tomcat-access"
    - index: "tomcat-error-%{[agent.version]}-%{+yyy.MM.dd}"
      when.contains:
        tags: "tomcat-error"

root@web02:~# systemctl restart filebeat.service

2.4、插件查看索引

图片[6]-利用 Filebeat 收集日志(下)-李佳程的个人主页

2.5、通过 Kibana 查看收集的日志信息

图片[7]-利用 Filebeat 收集日志(下)-李佳程的个人主页

3、案例: 利用 Filebeat 收集 Nginx 日志到 Redis

将 filebeat收集的日志,发送至Redis 格式如下

3.1、安装 Nginx 配置访问日志使用 Json格式

3.2、安装和配置 Redis

root@client:~# apt install -y redis
root@client:~# sed -i.bak '/^bind.*/c bind 0.0.0.0' /etc/redis/redis.conf
root@client:~# systemctl restart redis

3.3、修改 Filebeat 配置文件

root@web01:~# vim /etc/filebeat/filebeat.yml
......
output.redis:
  hosts: ["192.168.1.100:6379"]
  key: "filebeat"
  # password: "123456"
  # db: 0

root@web01:~# systemctl restart filebeat.service 

3.3、在 Redis 验证日志数据

127.0.0.1:6379> keys *
1) "filebeat"
127.0.0.1:6379> TYPE filebeat
list
127.0.0.1:6379> llen filebeat
(integer) 9
127.0.0.1:6379> llen filebeat
(integer) 11

127.0.0.1:6379> LINDEX filebeat 11
"{\"@timestamp\":\"2023-01-03T12:21:26.000Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"7.17.8\"},\"ecs\":{\"version\":\"1.12.0\"},\"responsetime\":0,\"referer\":\"-\",\"log\":{\"offset\":160858,\"file\":{\"path\":\"/var/log/nginx/access_json.log\"}},\"upstreamtime\":\"-\",\"status\":\"200\",\"host\":{\"architecture\":\"x86_64\",\"os\":{\"family\":\"debian\",\"name\":\"Ubuntu\",\"kernel\":\"5.4.0-131-generic\",\"codename\":\"focal\",\"type\":\"linux\",\"platform\":\"ubuntu\",\"version\":\"20.04.5 LTS (Focal Fossa)\"},\"name\":\"web01.test.com\",\"id\":\"9eaba3e85c9a4e16b66cda021bc16221\",\"containerized\":false,\"ip\":[\"192.168.1.105\",\"fe80::20c:29ff:fe6c:ce9f\"],\"mac\":[\"00:0c:29:6c:ce:9f\"],\"hostname\":\"web01.test.com\"},\"clientip\":\"192.168.1.105\",\"http_user_agent\":\"Elastic-Heartbeat/7.17.8 (linux; amd64; 692b4aac606e457bd2f5ef092d2d23c2fa950828; 2022-12-03 00:38:18 +0000 UTC)\",\"input\":{\"type\":\"log\"},\"uri\":\"/index.html\",\"xff\":\"-\",\"tcp_xff\":\"-\",\"http_host\":\"192.168.1.105\",\"size\":12,\"upstreamhost\":\"-\",\"domain\":\"192.168.1.105\",\"tags\":[\"nginx-access\"],\"agent\":{\"hostname\":\"web01.test.com\",\"ephemeral_id\":\"254a3692-8ccd-44d5-af39-d6c20165d71f\",\"id\":\"2fe34205-12d8-4f37-a3f5-39e0d42f73e6\",\"name\":\"web01.test.com\",\"type\":\"filebeat\",\"version\":\"7.17.8\"}}"
127.0.0.1:6379> LINDEX filebeat 10
"{\"@timestamp\":\"2023-01-03T12:21:23.000Z\",\"@metadata\":{\"beat\":\"filebeat\",\"type\":\"_doc\",\"version\":\"7.17.8\"},\"log\":{\"offset\":160423,\"file\":{\"path\":\"/var/log/nginx/access_json.log\"}},\"tags\":[\"nginx-access\"],\"ecs\":{\"version\":\"1.12.0\"},\"uri\":\"/index.html\",\"responsetime\":0,\"upstreamhost\":\"-\",\"clientip\":\"192.168.1.1\",\"agent\":{\"name\":\"web01.test.com\",\"type\":\"filebeat\",\"version\":\"7.17.8\",\"hostname\":\"web01.test.com\",\"ephemeral_id\":\"254a3692-8ccd-44d5-af39-d6c20165d71f\",\"id\":\"2fe34205-12d8-4f37-a3f5-39e0d42f73e6\"},\"domain\":\"192.168.1.105\",\"http_user_agent\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42\",\"upstreamtime\":\"-\",\"size\":0,\"http_host\":\"192.168.1.105\",\"host\":{\"id\":\"9eaba3e85c9a4e16b66cda021bc16221\",\"containerized\":false,\"ip\":[\"192.168.1.105\",\"fe80::20c:29ff:fe6c:ce9f\"],\"mac\":[\"00:0c:29:6c:ce:9f\"],\"name\":\"web01.test.com\",\"hostname\":\"web01.test.com\",\"architecture\":\"x86_64\",\"os\":{\"kernel\":\"5.4.0-131-generic\",\"codename\":\"focal\",\"type\":\"linux\",\"platform\":\"ubuntu\",\"version\":\"20.04.5 LTS (Focal Fossa)\",\"family\":\"debian\",\"name\":\"Ubuntu\"}},\"xff\":\"-\",\"tcp_xff\":\"-\",\"referer\":\"-\",\"status\":\"304\",\"input\":{\"type\":\"log\"}}"

4、案例: 从标准输入读取再输出至 Kafka

root@web01:~# vim /etc/filebeat/filebeat.yml
output.kafka:
  hosts: ["192.168.1.87:9092", "192.168.1.88:9092", "192.168.1.89:9092"]
  topic: filebeat-log   #指定kafka的topic
  partition.round_robin:
    reachable_only: true#true表示只发布到可用的分区,false时表示所有分区,如果一个节点down,会block
  required_acks: 1  #如果为0,错误消息可能会丢失,1等待写入主分区(默认),-1等待写入副本分区
  compression: gzip
  max_message_bytes: 1000000 #每条消息最大长度,以字节为单位,如果超过将丢弃

5、案例: 从标准输入读取再输出至 Logstash

root@web01:~# vim /etc/filebeat/filebeat.yml
output.logstash:
  hosts: ["192.168.1.108:5044","192.168.1.109:5044"]
  index: filebeat
  loadbalance: true    #默认为false,只随机输出至一个可用的logstash,设为true,则输出至全部
logstash
  worker: 1     #线程数量
  compression_level: 3 #压缩比

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享