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收集主流应用日志的更多相关文章

  1. 带你了解zabbix整合ELK收集系统异常日志触发告警~

    今天来了解一下关于ELK的“L”-Logstash,没错,就是这个神奇小组件,我们都知道,它是ELK不可缺少的组件,完成了输入(input),过滤(fileter),output(输出)工作量,也是我 ...

  2. ELK收集Nginx自定义日志格式输出

    1.ELK收集日志的有两种常用的方式: 1.1:不修改源日志格式,简单的说就是在logstash中转通过 grok方式进行过滤处理,将原始无规则的日志转换为规则日志(Logstash自定义日志格式) ...

  3. ELK收集Nginx|Tomcat日志

    1.Nginx 日志收集,先安装Nginx cd /usr/local/logstash/config/etc/,创建如下配置文件,代码如下 Nginx.conf input { file { typ ...

  4. 搭建ELK收集PHP的日志

    架构: filebeat --> redis -->logstash --> es --> kibana 每个客户端需要安装filebeat收集PHP日志 filebeat把收 ...

  5. elk收集tomcat的日志

    logstash收集tomcat的日志 不要修改下tomcat中server.xml的日志格式,否则tomcat无法启动,试过多次,不行,就用自带的日志让logstash去收集 首先给tomcat日志 ...

  6. ELK收集tomcat访问日志并存取mysql数据库案例

    这个案例中,tomcat产生的日志由filebeat收集,然后存取到redis中,再由logstash进行过滤清洗等操作,最后由elasticsearch存储索引并由kibana进行展示. 1.配置t ...

  7. ELK收集windows服务器日志笔记

    一.软件版本 1.jdk-8u211-linux-x64.rpm 2.elasticsearch-6.8.1.rpm 3.logstash-6.8.1.rpm 4.kibana-6.8.1-x86_6 ...

  8. ELK收集tomcat状态日志

    1.先查看之前的状态日志输出格式:在logs/catalina.out这个文件中 最上面的日志格式我们可能不太习惯使用,所以能输出下面的格式是最好的,当然需要我们自定义日志格式,接下来看看如何修改 2 ...

  9. elk收集tomcat日志

    1.elk收集tomcat普通日志: 只在logstash节点增加如下文件,重启logstash即可: cat >>/home/logstash-6.3.0/config/tomcat_t ...

  10. elk收集分析nginx access日志

    elk收集分析nginx access日志 首先elk的搭建按照这篇文章使用elk+redis搭建nginx日志分析平台说的,使用redis的push和pop做队列,然后有个logstash_inde ...

随机推荐

  1. 力扣150(java)-逆波兰表达式求值(中等)

    题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. 可以保证给定的逆波兰表达式 ...

  2. 如何高效完成ECS多环境部署?

    ​简介:通过本文,你可以了解到,如何通过云效流水线有效拉通开发与运维,打破二者之间的壁垒墙,让开发与运维高效联动.在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开 ...

  3. CCO x Hologres:实时数仓高可用架构再次升级,双11大规模落地

    ​简介:本文将会介绍今年是如何在去年基础上进行实时数仓高可用架构升级,并成功大规模落地双11. 作者 | 梅酱 来源 | 阿里技术公众号 一 2021年双11总结 2021年阿里巴巴双11期间,由CC ...

  4. [ELK] Docker 运行 Elastic Stack 支持 TLS 的两种简单方式

    第一种就是 按照官方文档进行配置,指定证书位置开启. Run the Elastic Stack in Docker with TLS enabled. 第二种就是 9200 端口只暴露给本机,127 ...

  5. 2018-12-26-WPF-开启-ScrollViewer-的触摸滚动

    title author date CreateTime categories WPF 开启 ScrollViewer 的触摸滚动 lindexi 2018-12-26 14:24:26 +0800 ...

  6. 简单聊一聊Java的历史

    Java这门语言有很多不可忽视的优点,比如一次编写到处运行,又比如它有一个相对安全的内存管理和访问机制,避免了C++中经常出现的内存泄露和指针越界问题等等,java带来的这些好处,让我们这些java程 ...

  7. 密码学—DES加密的IP置换Python程序

    文章目录 IP初始置换与逆置换 编程想法 转二进制过程中的提取一些数据 64为一组 IP置换 IP逆置换 DES发明人 美国IBM公司W. Tuchman 和 C. Meyer1971-1972年研制 ...

  8. PageOffice 6 保存数据区域数据同时保存文档

    在实际应用中,例如在线签订合同的时候,合同的签订日期,合同号等等这些信息既要保存到数据库,合同签订后又要将整个合同文件保存起来.这时候就需要用到PageOffice的保存数据区域数据的同时保存整个文件 ...

  9. C# 程序集、模块和类型概念及关系

    目录 C# 程序集.模块和类型概念及关系 概述 程序集 模块 类型 程序集.模块和类型的关系 总结 引用 C# 程序集.模块和类型概念及关系 概述 在 C# 中,程序集.模块和类型是构成 .NET 应 ...

  10. VS Code 代码片段编写教程

    VS Code 代码片段编写教程 最近要做一个vs code的代码片段插件,于是搜索和学习相关内容,整理分享给大家! [!TIP] 本篇博客50%+内容由BingChat提供,然后作者对内容进行验证和 ...