ELK收集日志之logstash使用

一、logstash使用

1.logstah收集文件日志

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

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

2.配置logstash

#默认配置文件
[root@logstash ~]# vim /etc/logstash/logstash.yml
#启动logstash回去读取conf.d下面的配置文件
path.config: /etc/logstash/conf.d

3.配置logstash收集文件日志到文件

1)配置

[root@logstash ~]# vim /etc/logstash/conf.d/message.conf
input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
  }
}

output {
  file {
    path => "/tmp/message_%{+YYYY.MM.dd}.log"
  }
}

2)启动logstash

#先检查语法
[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf -t

#启动
[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf &

3)查看新文件内容

[root@logstash ~]# tail /var/log/messages
Jul 17 15:01:01 logstash systemd: Started Session 448 of user root.

Jul 17 15:05:01 logstash systemd: Started Session 449 of user root.

[root@logstash ~]# tail /tmp/message_2020.07.17.log
{"@version":"1","path":"/var/log/messages","message":"Jul 17 15:01:01 logstash systemd: Started Session 448 of user root.","@timestamp":"2020-07-17T07:05:42.341Z","host":"logstash"}
{"@version":"1","path":"/var/log/messages","message":"Jul 17 15:05:01 logstash systemd: Started Session 449 of user root.","@timestamp":"2020-07-17T07:05:42.341Z","host":"logstash"}

4.配置收集日志到ES

1)配置

[root@logstash tmp]# vim /etc/logstash/conf.d/message_es.conf
input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["10.0.0.51:9200"]
    index => "messages_%{+YYYY-MM-dd}.log"
  }
}

2)启动logstash

#先检查语法
[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf -t

#启动
[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf &

启动多个logstash进程需要配置多个data目录,否则会出现这样的报错

[ERROR] 2020-07-20 11:59:22.363 [LogStash::Runner] Logstash - java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit

5.启动logsstash多实例

1)创建多实例数据目录

[root@logstash ~]# mkdir /data/logstash/{message_file,secure_file} -p
#授权目录logstash权限
[root@logstash ~]# chown -R logstash.logstash /data/logstash/

2)启动多实例

#启动多实例要加一个参数 --path.data 指定多实例不同的数据目录

[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/message_es.conf --path.data=/data/logstash/message_file &

[root@logstash tmp]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/secure_es.conf --path.data=/data/logstash/secure_file &

6.单个进程收集多个日志

1)停掉原来的进程删掉索引

2)配置方式一:

[root@logstash ~]# vim /etc/logstash/conf.d/double_es.conf
input {
  file {
    type => "messages_log"
    path => "/var/log/messages"
    start_position => "beginning"
  }
  file {
    type => "secure_log"
    path => "/var/log/secure"
    start_position => "beginning"
  }
}

output {
  if [type] == "messages_log" {
    elasticsearch {
      hosts => ["10.0.0.51:9200"]
      index => "messages_%{+YYYY-MM-dd}.log"
    }
  }
  if [type] == "secure_log" {
    elasticsearch {
      hosts => ["10.0.0.51:9200"]
      index => "secure_%{+YYYY-MM-dd}.log"
    }
  }
}

3)配置方式二:

[root@logstash ~]# vim /etc/logstash/conf.d/doubles_es.conf
input {
  file {
    type => "messages_log"
    path => "/var/log/messages"
    start_position => "beginning"
  }
  file {
    type => "secure_log"
    path => "/var/log/secure"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["10.0.0.51:9200"]
    index => "%{type}_%{+YYYY-MM-dd}.log"
  }
}

4)启动

[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/doubles_es.conf

二、收集tomcat日志

1.安装tomcat

#上传包
#安装java环境
#解压包
[root@logstash ~]# tar xf apache-tomcat-9.0.30.tar.gz
#移动并做软连接
[root@logstash ~]# mv apache-tomcat-9.0.30 /usr/local/
[root@logstash ~]# ln -s /usr/local/apache-tomcat-9.0.30 /usr/local/tomcat

2.启动tomcat

#配置一个页面
[root@logstash ~]# echo "test logstash log" > /usr/local/tomcat/webapps/ROOT/index.html

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

[root@logstash ~]# netstat -lntp
tcp6       0      0 :::8080                 :::*                    LISTEN      84967/java

3.配置logstash收集tomcat日志

[root@logstash ~]# vim /etc/logstash/conf.d/tomcat_es.conf
input {
  file {
    path => "/usr/local/tomcat/logs/catalina.*.log"  #input 插件不识别变量,日志只收集当天的,以前的日志文件第二天之后不会再写入,所以这里用* 就可以收集每天的日志。
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["10.0.0.51:9200"]
    index => "tomcat_%{+YYYY-MM-dd}.log"
  }
}

[root@logstash ~]# vim /etc/logstash/conf.d/tomcat_access_es.conf
input {
  file {
    path => "/usr/local/tomcat/logs/localhost_access_log.*.txt"
    start_position => "beginning"
  }
}

output {
  elasticsearch {
    hosts => ["10.0.0.51:9200"]
    index => "tomcat_access_%{+YYYY-MM-dd}.log"
  }
}

4.启动

[root@logstash ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat_access_es.conf

5.收集tomcat错误日志

1)概念

当收集tomcat错误日志时,一条报错可能是很多行,收集到以后时很多条数据,查看时比较麻烦

#解决方式
1.跟开发协商,将tomcat日志格式改为json格式,直接收集即可
2.通过logstash的模块将日志合并

2)方式一:

#进入tomcat配置文件目录
[root@elkstack03 ~]# cd /usr/local/tomcat/conf
#编辑server配置文件
[root@elkstack03 conf]# vim server.xml
#在138行,添加如下内容

3)方式二:

[root@logstash ~]# vim /etc/logstash/conf.d/tomcat_mutiline_es.conf
input {
  file {
    type => "java_log"
    path => "/usr/local/tomcat/logs/localhost_access_log.*.txt"
    start_position => "beginning"
    codec => multiline {
      pattern => "^\["
      negate => true
      what => "previous"
    }
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.51:9200"]
    index => "tomcat_mutiline_%{+YYYY-MM-dd}.log"
  }
}

#注释:
[root@elkstack03 ~]# vim /etc/logstash/conf.d/java.conf
input {
        stdin {
        codec => multiline {
#当遇到[开头的行时候将多行进行合并
        pattern => "^\["
#true为匹配成功进行操作,false为不成功进行操作
        negate => true
#与上面的行合并,如果是下面的行合并就是next
        what => "previous"
        }}
}
output {
        stdout {
        codec => rubydebug
        }
}

Original: https://www.cnblogs.com/zbzSH/p/15727583.html
Author: zbzSH
Title: ELK收集日志之logstash使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524250/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 我懂得了什么

    站在24岁的这个档口,没有学业又没有工作的时刻,前不着村后不着店。我觉得应该要写一些总结,虽然年仅24的我相比老人家总结不出更深刻的道理,但是现在是互联网的时代,获取知识的途径已经…

    Linux 2023年6月6日
    0104
  • Java 集合框架

    一、 Collection集合 1.1 集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据。 数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的元…

    Linux 2023年6月7日
    080
  • 面试连环炮系列(二十七):如何保证缓存与数据库的数据一致性

    1. 如何保证缓存与数据库的数据一致性? 要保持数据强一致性,只能将读请求和写请求串行化,在同一个内存队列里执行。但是串行化会导致系统的吞吐量大幅度降低,多用几倍的机器去支撑线上的…

    Linux 2023年6月6日
    086
  • 深入理解java泛型

    什么是Java泛型 泛型的使用 泛型类 泛型接口 泛型方法 泛型的底层实现机制 ArrayList源码解析 什么是泛型擦除 泛型的边界 ?:无界通配符 extends 上边界通配符…

    Linux 2023年6月6日
    0128
  • apt-get指令关于卸载软件的各种用法

    一、 apt-get remove packagename 该命令将移除与 packagename相关联的所有二进制文件,但是不会移除与之相关联的配置文件或数据文件(configu…

    Linux 2023年5月27日
    0146
  • redis中key和value的存储大小限制

    String类型:一个String类型的value最大可以存储512M List类型:list的元素个数最多为2^32-1个,也就是4294967295个。 Set类型:元素个数最…

    Linux 2023年5月28日
    0134
  • 解决pip下载慢

    临时使用 可以在使用pip的时候加参数 -i https://pypi.tuna.tsinghua.edu.cn/simple 设为默认 pip install pip -U -i…

    Linux 2023年6月13日
    090
  • 高速USB转8串口产品设计-RS485串口

    基于480Mbps 高速USB转8路串口芯片CH348,可以为各类主机扩展出8个独立的串口。使用厂商提供的VCP串口驱动程序,可支持Windows、Linux、Android、ma…

    Linux 2023年6月7日
    0118
  • 通过启动脚本控制PHP-FPM开关

    vi /etc/init.d/php-fpm 复制粘贴以下内容: ! /bin/sh Comments to support chkconfig on CentOSchkconfi…

    Linux 2023年6月6日
    085
  • Jenkins初始化界面一直显示Please wait while Jenkins is getting ready to work …

    第一次访问 jenkins时,会提示如下界面: 注:如果这个界面初始化的时间过长,则需要修改相关配置文件。 原因:因为访问官网太慢。我们只需要换一个源,不使用官网的源即可。 1、找…

    Linux 2023年6月13日
    098
  • Power Outage

    由于Covid-19的原因一直是work from home, 在几天前家里的电表有问题需要人来维修,在这期间会停电大概半小时操作,虽然是wfh,但是还是要保障工作的正常进行,保守…

    Linux 2023年6月7日
    0111
  • (Java初学篇)IDEA项目新建流程和软件配置优化以及怎么彻底删除项目

    相信很多小伙伴们在初学 Java 时都会出现这样的情况,就是在网上一顿搜索加捣鼓终于把 JDK 和IDEA 这两款软件安装配置好,但是发现面对这个陌生的软件此时却无从下手,那么接下…

    Linux 2023年6月6日
    0143
  • MySQL PXC集群的实现

    MHA:一主多从,主节点挂了就提升一个从节点作为主节点。 缺点:提升从节点为主节点需要时间,且只有一个节点能进行写操作,所以写的性能不高。 双主架构:两个主节点,两个节点都能进行读…

    Linux 2023年6月7日
    081
  • sed高阶用法

    a 追加 [root@localhost ~]# cat test hello world jjjd aaaaaaa //向第二行后面追加’hi world’ [root@loca…

    Linux 2023年6月13日
    099
  • 子网掩码、前缀长度、IP地址数的换算

    子网掩码、前缀长度、IP地址数的换算 子网掩码 子网掩码只有一个功能,就是将IP地址划分为网络地址和主机地址两部分。 如同现实生活中的通讯地址,可以看作省市部分和具体门牌号部分。相…

    Linux 2023年6月6日
    0247
  • SpringBoot-druid

    SpringBoot-druid 9.1 druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一…

    Linux 2023年6月14日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球