首页 > 其他分享 >ELK收集主流应用日志

ELK收集主流应用日志

时间:2024-04-11 10:48:17浏览次数:28  
标签:ELK filebeat log 收集 access nginx 日志 es

1.收集nginx日志

学习背景:access.log,error.log目前日志混杂在一个es索引下。

 

改进filebeat配置

https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html

加上日志输入文件的判断,采用不同的索引

 

  1 filebeat.inputs:
  2 - type: log
  3   enabled: true
  4   paths:
  5     - /var/log/nginx/access.log
  6   json.keys_uner_root: true
  7   json.overwrite_keys: true
  8 
  9 
 10 - type: log
 11   enabled: true
 12   paths:
 13     - /var/log/nginx/error.log
 14 
 15 
 16 output.elasticsearch:
 17   hosts: ["http://localhost:9200"]
 18   indices:
 19     - index: "nginx-access-%{[agent.version]}-%{+yyyy.MM.dd}"
 20       when.contains:
 21         log.file.path: "/var/log/nginx/access.log"
 22     - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM.dd}"
 23       when.contains:
 24         log.file.path: "/var/log/nginx/error.log"
 25 
 26 
 27 setup.ilm.enabled: false
 28 setup.template.enabled: false
 29 
 30 logging.level: info
 31 logging.to_files: true
 32 logging.files:
 33   path: /var/log/filebeat
 34   name: filebeat
 35   keepfiles: 7
 36   permissions: 0644

查看es数据

 

access.log

 

error.log

 

完成nginx日志拆分index

curl 127.0.0.1/laoliu
curl 127.0.0.1/laoliu

 

2.Kibana图形化定制

柱状图

选择可视化

 

选择图形模式

 

柱状图、x、y轴图形数据

 

多个客户端,记得点击save,保存图形

 

data table

 

可视化存档

 

饼图

  • 客户端类型
  • 操作系统类型
  • http状态码

 

编辑dashboard

 

3.使用ES预处理节点转换Nginx日志

背景

1.我们可以提提前修改nginx日志为json格式(常见做法,省事)

2.不修改源数据,使用es提供的grok转换器(太麻烦)

3.更高级用法是用filebeat模块

https://www.elastic.co/guide/en/elasticsearch/reference/master/ingest.html

先恢复你nginx日志为基础格式
systemctl stop filebeat
> /var/log/nginx/access.log
vim /etc/nginx/nginx.conf
systemctl restart nginx
curl 127.0.0.1
cat /var/log/nginx/access.log

 

nginx基础日志
127.0.0.1 - - [19/Feb/2023:11:53:59 +0800] "GET / HTTP/1.1" 200 9205 "-" "curl/7.29.0" "-"
127.0.0.1 - - [19/Feb/2023:11:53:59 +0800] "GET / HTTP/1.1" 200 9205 "-" "curl/7.29.0" "-"

Grok

https://www.elastic.co/guide/en/elasticsearch/reference/master/grok-processor.html

GROK是一种采用组合多个预定义的正则表达式,用来匹配分割文本并映射到关键字的工具。通常用来对日志数据进行处理。本文档主要介绍GROK的模式说明以及常用语法。

GROK模式及说明如下表所示。

https://help.aliyun.com/document_detail/129387.html

https://developer.qiniu.com/insight/4759/grok-parser

 

测试

 

grok转换语法

127.0.0.1                             ==> %{IP:clientip}
-                                     ==> -
-                                     ==> -
[08/Oct/2020:16:34:40 +0800]         ==> \\[%{HTTPDATE:nginx.access.time}\\]
"GET / HTTP/1.1"                     ==> "%{DATA:nginx.access.info}"
200                                 ==> %{NUMBER:http.response.status_code:long} 
5                                     ==> %{NUMBER:http.response.body.bytes:long}
"-"                                 ==> "(-|%{DATA:http.request.referrer})"
"curl/7.29.0"                         ==> "(-|%{DATA:user_agent.original})"
"-"                                    ==> "(-|%{IP:clientip})"

 

字符对应grok模式

%{IP:clientip} - - \[%{HTTPDATE:nginx.access.time}\] \"%{DATA:nginx.access.info}\" %{NUMBER:http.response.status_code:long} %{NUMBER:http.response.body.bytes:long} \"(-|%{DATA:http.request.referrer})\" \"(-|%{DATA:user_agent.original})\"

转换结果

 

1.创建pipeline

 

GET _ingest/pipeline
PUT  _ingest/pipeline/pipeline-nginx-access
{
  "description" : "nginx access log",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": ["%{IP:clientip} - - \\[%{HTTPDATE:nginx.access.time}\\] \"%{DATA:nginx.access.info}\" %{NUMBER:http.response.status_code:long} %{NUMBER:http.response.body.bytes:long} \"(-|%{DATA:http.request.referrer})\" \"(-|%{DATA:user_agent.original})\""]
      }
    },{
      "remove": {
        "field": "message"
      }
    }
  ]
}

 

2.修改filebeat

 

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  tags: ["access"]

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log
  tags: ["error"]

processors:
  - drop_fields:
      fields: ["ecs","log"]  //删除不需要的字段

output.elasticsearch:
  hosts: ["10.0.0.18:9200"]

  pipelines:
    - pipeline: "pipeline-nginx-access"
      when.contains:
        tags: "access"

  indices:
    - index: "nginx-access-%{[agent.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "access"

    - index: "nginx-error-%{[agent.version]}-%{+yyyy.MM}"
      when.contains:
        tags: "error"

setup.ilm.enabled: false
setup.template.enabled: false

logging.level: info
logging.to_files: true

例如删除如下字段

 

3.测试pipeline转换的nginx日志

清空,删除所有es 索引,注意测试用法,生产别执行。
[root@es-node1 ~]#curl -X DELETE 'http://localhost:9200/_all'
{"acknowledged":true}
[root@es-node1 ~]#systemctl restart filebeat.service 
[root@es-node1 ~]#

[root@es-node1 ~]#systemctl restart filebeat.service 
[root@es-node1 ~]#

注意再去访问nginx,产生日志,此时filebeat会抓取新日志数据,写入es,生成索引

[root@es-node1 ~]#curl 127.0.0.1
[root@es-node1 ~]#curl 127.0.0.1
[root@es-node1 ~]#curl 127.0.0.1

 

4.kibana可视化新格式es数据

 

5.小结

只有专门维护ELK的高级工程师,只维护ELK,需要大量且复杂的维护日志系统,需要手工写grok转换规则。

 

标签:ELK,filebeat,log,收集,access,nginx,日志,es
From: https://www.cnblogs.com/sxy-blog/p/18128280

相关文章

  • EBLK日志收集方案
    ELK是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash和Kibana。该组合版本会统一发布。 ElasticSearch简称ES,它是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文......
  • Log4J日志配置详解
    一、Log4j简介Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。1、LoggersLoggers组件......
  • 日志收集系统PLG(Promtail+Loki+Grafana)部署
    一、简介Loki是受Prometheus启发由GrafanaLabs团队开源的水平可扩展,高度可用的多租户日志聚合系统。开发语言:GoogleGo。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数......
  • hadoop篇——nameNode DataNode SecondaryNameNode的作用,以及如何查看操作日志
    集群下的hadoop(112主节点113,114从节点)如果112挂了,数据以及操作日志会丢失无法恢复,又称单点故障。再启动start-all.shhadoop后,主节点会产生name以及secondary两个文件 所在地址在  /root/training/hadoop-2.7.3/tmp/dfs其中name对应的是NameNode节点:接受客户端的请......
  • 分布式任务调度平台XXL-JOB:调度日志打印时区问题
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Q......
  • 如何查看jvm中的垃圾收集器
    查看jvm中参数:java-XX:+PrintCommandLineFlags-version返回:-XX:G1ConcRefinementThreads=8-XX:GCDrainStackTargetSize=64-XX:InitialHeapSize=524342912-XX:MaxHeapSize=8389486592-XX:+PrintCommandLineFlags-XX:ReservedCodeCacheSize=251658240-XX:+SegmentedCodeC......
  • P8661 [蓝桥杯 2018 省 B] 日志统计 题解
    好久没写题解了,水一篇。这里主要想讲的是不同的处理方法,在阅读本篇题解前请确保读完题。详解一,排序这很好理解,题目要求将热帖从小到大输出,同时题目中还有相对的时间这一概念,因此将输入的\(id\)与\(ts\)按照优先\(id\)其次\(ts\)的排序方式从小到大,排序,这样输出时就没......
  • Windows 事件日志禁用教程:简单步骤
    事件日志是详细说明主要和次要更改甚至错误的报告。如果服务或启动应用在第一次尝试时无法运行,则会生成日志。但是,当日志数量变得很大时,用户可能希望禁用Windows事件日志。单个日志在磁盘上占用的空间很小,但如果每天生成数千个此类报告并将其存储在SSD上,那么您会看到性能下降......
  • 采用自定义注解 和 AOP 完成日志记录
    1、声明一个自定义注解@Retention注解包含一个RetentionPolicy类型的属性value,用于指定注解的保留策略,常用的保留策略包括:RetentionPolicy.SOURCE:表示注解仅在源代码中保留,编译器编译时会将其忽略,不会保存在编译后的字节码中。RetentionPolicy.CLASS:表示注解在编译后的......
  • 日志脱敏更加优雅性能更好,远超正则。支持 logback+log4j2 插件
    项目介绍日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。sensitive项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。支持logback和log4j2等常见的日志脱敏插件。日志插件解决正则匹配长文本可能出现的回溯......