首页 > 其他分享 >第五章 logstash学习

第五章 logstash学习

时间:2022-09-21 13:47:08浏览次数:69  
标签:log web01 学习 第五章 conf 日志 root logstash

一、ELK搭建

1.ES搭建

2.logstash搭建

1)安装java环境

2)安装logstash

3)配置环境变量

4)logstash的插件

INPUT:插件使Logstash能够读取特定的事件源。
OUTPUT:插件将事件数据发送到特定的目的地,OUTPUT是事件流水线中的最后阶段。

INPUT支持事件源 OUTPUT支持输出源 CODEC编解码器支持编码
azure_event_hubs(微软云事件中心) elasticsearch(搜索引擎数据库) avro(数据序列化)
beats(filebeat日志收集工具) email(邮件) CEF(嵌入式框架)
elasticsearch(搜索引擎数据库) file(文件) es_bulk(ES中的bulk api)
file(文件) http(超文本传输协议) Json(数据序列化、格式化)
generator(生成器) kafka(基于java的消息队列) Json_lines(便于存储结构化)
heartbeat(高可用软件) rabbitmq(消息队列 OpenStack) line(行)
http_poller(http api) redis(缓存、消息队列、NoSQL) multiline(多行匹配)
jdbc(java连接数据库的驱动) s3*(存储) plain(纯文本,事件间无间隔)
kafka(基于java的消息队列) stdout(标准输出) rubydebug(ruby语法格式)
rabbitmq(消息队列 OpenStack) tcp(传输控制协议)
redis(缓存、消息队列、NoSQL) udp(用户数据报协议)
s3*(存储)
stdin(标准输入)
syslog(系统日志)
tcp(传输控制协议)
udp(用户数据报协议)

5)logstash练习

1.logstash收集标准输入到标准输出
[root@web01 ~]# logstash -e 'input { stdin {} } output { stdout {} }'

2.logstash收集标准输入指定格式到标准输出
[root@web01 ~]# logstash -e 'input { stdin {} } output { stdout { codec => "rubydebug" } }'

3.logstash收集标准输入到文件
[root@web01 ~]# logstash -e 'input { stdin {} } output { file { path => "/tmp/1.txt" } }'

4.logstash收集标准输入到ES
[root@web01 ~]# logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["10.0.0.71:9200"] index => "test_%{+YYYY-MM-dd}" } }'

3.kibana搭建

1)安装java环境

2)安装kibana

3)配置kibana

4)启动

5)kibana区域定义

1.时间区域:
	1)快速查询
	2)时间范围查询
	3)精确时间范围查询
	4)使用过的时间区域
2.搜索区域:
	可以根据关键字,状态码等搜索需要的数据
3.数据展示区域:
	将收集的对应索引的日志展示在页面上
4.日志列表区域:
	可以选择需要的字段进行数据的展示,不需要的可以移除

二、logstash使用学习

不难理解,我们的日志通常都是在日志文件中存储的,所以,当我们在使用INPUT插件时,收集日志,需要使用file模块,从文件中读取日志的内容,那么接下来讲解的是,将日志内容输出到另一个文件中,如此一来,我们可以将日志文件同意目录,方便查找。

注意:Logstash与其他服务不同,收集日志的配置文件需要我们根据实际情况自己去写。
前提:需要Logstash对被收集的日志文件有读的,并且对要写入的文件,有写入的权限。

1.logstash配置文件

[root@web01 ~]# vim /etc/logstash/logstash.yml
path.config: /etc/logstash/conf.d

2.logstash收集单个日志到文件

1)配置

[root@web01 ~]# cd /etc/logstash/conf.d/
[root@web01 /etc/logstash/conf.d]# vim message_file.conf
input {
    file {
        path => "/var/log/messages"
        start_position => "beginning"
    }
}
output {
    file {
        path => "/tmp/messages_%{+YYYY-MM-dd}"
    }
}

[root@web01 /etc/logstash/conf.d]# vim message_file.conf
#输入插件
input {
#文件模块
    file {
#日志类型
        type => "message-log"
#日志路径
        path => "/var/log/messages"
#第一次收集日志从头开始
        start_position => "beginning"
  }
}
#输出插件
output {
#文件模块
    file {
#输出路径
        path => "/tmp/message_%{+yyyy.MM.dd}.log"
    }
}

2)启动

#检测语法
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf -t

#启动
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf &

3)测试日志收集

#实时监控收集到的日志
[root@web01 ~]# tail -f /tmp/messages_2020-12-04

#手动添加一台日志
[root@web01 ~]# echo 111 >> /var/log/messages

3.logstash收集单个日志到ES

1)配置

[root@web01 ~]# vim /etc/logstash/conf.d/message_es.conf 
input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "message_%{+YYYY-MM-dd}"
  }
}

2)启动

[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf &
[2] 82713

4.logstash启动多实例

logstash收集日志时使用多实例方式启动,不是使用system管理启动,但是启动多实例会报错,怎么处理?

1)配置收集/var/log/secure日志

[root@web01 ~]# vim /etc/logstash/conf.d/secure_es.conf 
input {
  file {
    path => "/var/log/secure"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "secure_%{+YYYY-MM-dd}"
  }
}

2)启动多实例

logstash只启动一个不需要数据目录,如果想要启动多个进程,需要每个进程指定不同的数据目录,需要加 --path.data参数,然后可以启动多实例

1.创建数据目录
[root@web01 ~]# mkdir /data/logstash/messages_es -p
[root@web01 ~]# mkdir /data/logstash/secure_es -p
[root@web01 ~]# chown -R logstash.logstash /data/logstash/

2.分别指定数据目录再启动两个进程
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf --path.data=/data/logstash/messages_es &
[root@web01 ~]# logstash -f /etc/logstash/conf.d/secure_es.conf --path.data=/data/logstash/secure_es &

5.logstash收集多个日志到文件

1)配置

[root@web01 ~]# vim /etc/logstash/conf.d/morefile_file.conf
#输入的插件
input {
  #文件模块
  file {
    #收集文件的路径
    path => "/var/log/messages"
	#第一次收集从头收集
    start_position => "beginning"
	#收集日志间隔时间3秒
    stat_interval => "3"
  }
  #第二个文件模块
  file {
    #第二个收集日志的路径
    path => "/var/log/secure"
  }
}
#输出插件
output {
  #输出时的文件模块
  file {
    #输出的文件路径
    path => "/tmp/morefile.txt"
  }
}

2)启动

[root@web01 ~]# logstash -f /etc/logstash/conf.d/morefile_file.conf &

3)验证

[root@web01 ~]# tail -f /tmp/morefile.txt

#手动添加文件
[root@web01 ~]# echo 111 >> /var/log/messages
[root@web01 ~]# echo 2222 >> /var/log/secure

6.logstash收集多个日志到ES

1)配置

[root@web01 ~]# vim /etc/logstash/conf.d/morefile_es.conf 
input {
  file {
    path => "/var/log/messages"
  }
  file {
    path => "/var/log/secure"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "morefile_%{+YYYY-MM-dd}"
  }
}

2)启动

[root@web01 ~]# logstash -f /etc/logstash/conf.d/morefile_es.conf &

3)验证

7.收集多个日志到多个索引

1)方法一:

#配置
[root@web01 ~]# cat /etc/logstash/conf.d/morefile_es.conf
input {
  file {
    type => "messages_log"
    path => "/var/log/messages"
  }
  file {
    type => "secure_log"
    path => "/var/log/secure"
  }
}
output {
  if [type] == "messages_log" {
    elasticsearch {
      hosts => ["10.0.0.71:9200"]
      index => "messages_log_%{+YYYY-MM-dd}"
    }
  }
  if [type] == "secure_log" {
    elasticsearch {
      hosts => ["10.0.0.71:9200"]
      index => "secure_log_%{+YYYY-MM-dd}"
    }
  }
}

#启动
[root@web01 ~]# logstash -f /etc/logstash/conf.d/morefile_es.conf

2)方法二:

#配置
[root@web01 ~]# cat /etc/logstash/conf.d/second_morefile_es.conf
input {
  file {
    type => "messages_log"
    path => "/var/log/messages"
  }
  file {
    type => "secure_log"
    path => "/var/log/secure"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "%{type}_%{+YYYY-MM-dd}"
  }
}

#启动
[root@web01 ~]# logstash -f /etc/logstash/conf.d/second_morefile_es.conf

三、使用logstash收集nginx日志

1.修改nginx日志格式为json格式

[root@web01 ~]# cat /etc/nginx/nginx.conf 
... ...
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
                      
    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  main;
    access_log  /var/log/nginx/access.log  json;
    sendfile        on;
    client_max_body_size 100M;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

2.重启nginx访问查看日志

[root@web01 ~]# systemctl restart nginx

[root@web01 ~]# tail -f /var/log/nginx/access.log
{"@timestamp":"2020-12-04T17:39:22+08:00","host":"10.0.0.7","clientip":"10.0.0.1","size":0,"responsetime":0.000,"upstreamtime":"-","upstreamhost":"-","http_host":"10.0.0.7","url":"/index.html","referer":"-","agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36","status":"304"}

3.配置logstash收集nginx日志

[root@web01 ~]# vim /etc/logstash/conf.d/nginx_log_es.conf
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "end"
    type => "access_log"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "nginx_access_log_%{+YYYY-MM-dd}"
  }
}

4.启动并测试

[root@web01 ~]# logstash -f /etc/logstash/conf.d/nginx_log_es.conf

四、logstash收集tomcat日志

在企业中,我们看到tomcat日志遇到异常(exception)一条日志可能是几行或者十几行甚至几十行,组成的,那么,我们需要将多行日志变成一行日志,来收集

1.tomcat日志收集方式

这里我们有几种方式可以实现:
1.将日志改成Json格式
在企业中,想要将java日志改成json格式,并没有那么容易。
因为将日志改成Json格式,查看起来会很难受,有些开发人员不希望将日志格式改成Json的,所以,在改日志格式之前需要跟开发人员进行沟通,那么将tomcat日志格式改成Json格式也有两种方式。
	1)开发自己更改,通过程序代码,或者log4j
	2)运维修改tomcat的server配置文件
	
2.通过logstash的mutiline模块实现多行匹配

2.安装tomcat

1)安装java环境

2)安装tomcat

1.上传代码包
[root@web01 ~]# rz
[root@web01 ~]# ll
-rw-r--r--  1 root root  11026056 2020-12-04 18:04 apache-tomcat-9.0.30.tar.gz

2.解压tomcat包
[root@web01 ~]# tar xf apache-tomcat-9.0.30.tar.gz

3.将安装包移动并改名
[root@web01 ~]# mv apache-tomcat-9.0.30 /usr/local/tomcat-9.0.30

4.做软连接
[root@web01 ~]# ln -s /usr/local/tomcat-9.0.30 /usr/local/tomcat

3)配置站点

1.写一个测试页面到站点目录下的index.html文件中
[root@web01 ~]# echo 'TEST elk' > /usr/local/tomcat/webapps/ROOT/index.html

2.启动tomcat
[root@web01 ~]# /usr/local/tomcat/bin/startup.sh

3.检测tomcat端口是否启动
[root@web01 ~]# netstat -lntup|grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      12569/java

4)访问测试

http://10.0.0.7:8080/

3.配置logstash收集tomcat日志

1)配置

[root@web01 ~]# vim /etc/logstash/conf.d/tomcat_log_es.conf 
input {
  file {
    path => "/usr/local/tomcat/logs/localhost_access_log.*.txt"
    start_position => "end"
    type => "tomcat_log"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.71:9200"]
    index => "tomcat_log_%{+YYYY-MM-dd}"
  }
}

2)启动

[root@web01 ~]# logstash -f /etc/logstash/conf.d/tomcat_log_es.conf

标签:log,web01,学习,第五章,conf,日志,root,logstash
From: https://www.cnblogs.com/GAO321/p/16715298.html

相关文章

  • 记:信息系统项目管理师学习笔记三
    学习流程:先整理十大管理的详细知识点,然后是其他章节的内容项目整体管理:识别、确定、结合、统一与协调各项目管理过程组内不同过程与项目管理活动所需进行的各种过程和活......
  • 第一天的学习
    Markbown学习标题文字Hello,world!Hello,world!Hello,world!引用java学习 分割线图片 超链接Wlop列表ABC表格 名字性别生日张......
  • 如何在 Visual Studio Code 中设置和运行机器学习
    如何在VisualStudioCode中设置和运行机器学习如何在VisualStudioCode中设置和运行机器学习VSCode的市场充满了基本上所有编程目的的扩展,无论是自动完成代码片......
  • STC51单片机学习笔记
    点灯系列STC8点灯点击查看STC8点灯代码#include<STC8H.H>//include了stc8h.h,就不用声明P0M1之类的//#include"reg51.h"//sfrP0M1=0x93;//sfrP0M0=0x94;......
  • python学习笔记:pytest单元测试框架
    一、安装配置和运行规则1、安装:pipinstallpytest查看安装版本:pytest--version 2、Pytest用例运行规则用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规......
  • “Python 中的监督学习”Datacamp 课程回顾
    “Python中的监督学习”Datacamp课程回顾这是我刚刚参加的课程的回顾。这篇评论作为学习辅助:帮助我在第一次学习后综合信息,并希望将内容保留更长时间。这篇文章还提供了......
  • 《基于深度学习的跨模态检索综述》阅读笔记
    目录写这篇阅读笔记有如下目标0引言0.1多模态数据是什么?0.2多模态数据有哪些应用?0.3传统单模态检索是什么?0.4跨模态检索是什么?0.4.1优势0.4.2挑战0.4.3可行的解决......
  • 学习 React Native——可按下的触控动画
    学习ReactNative——可按下的触控动画Pressable是ReactNative应用程序中处理触摸的最新最好的工具,句柄新闻和长按唯一令人讨厌的是,如果用户触摸了按钮,它不会向......
  • FastAPI 学习之路(一)fastapi--高性能web开发框架
    fastapi是高性能的web框架。他的主要特点是:-快速编码-减少人为bug-直观-简易-具有交互式文档- 高性能-基于API的开放标准     支持python3.6版本。安装......
  • Markdown学习
      标题快捷键:Ctrl+1/2/3/4#+空格  1级标题##+空格 2级标题###+空格3级标题  字体粗体**内容**斜体*内容*粗体+斜体***内容**......