ELK提高篇之Logstash
二、Logstash
2.1、安装logstash
logstash依赖java 8或 java 11,也可以使用OpenJDK,在进行安装时,我们需要声明JAVA_HOME的环境变量,以保证正常地安装。这里我们采用OpenJDK的方式,更为简洁。
[root@elk ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
YUM安装方式:
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
#增加logstash源到yum仓库/etc/yum.repos.d/
[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
# yum install logstash
Logstash的工作原理图:
标准的输入输出测试:
/usr/share/logstash/bin/logstash -e 'input {stdin {} } output { stdout {} }'
hello
2.2、Logstash的工作原理解析
Logstash进行数据采集和流水线处理主要有三个步骤:inputs --> filters --> outputs
inputs负责定义数据采集的来源,filters进行自定义的过滤日志的规则,outputs是将日志输出到日志的存储区域,如elasticsearch存储。
inputs和outputs都支持对数据的格式进行编码和解码操作。
Inputs
inputs支持多种数据采集的方式,常用的方式有以下几种:
file:直接读取日志文件,类似命令行执行tailf查看日志
syslog:通过514端口进行监听syslog日志信息
redis:从redis服务器集群中读取日志,redis通常会作为一个中间运输层,以降低logstash日志处理的压力
beats:是一种轻量级的日志收集方式
Filters
Filters是logstash日志收集中的过滤处理层,常用的过滤器包含以下几种:
grok:解析和构建任意文本,通俗地说就是将非结构化的日志进行定义成结构化的格式
mutate:对日志的字段进行修改,替换和删除
drop:对日志进行删减部分
clone:对日志进行复制,可以是增加或者是删除操作
geoip:添加ip的地理位置信息,用于在kibana的图表统计信息,可以看到访问的区域分布
Outputs
Outputs是Logstash收集的最后一个环节,通常将前面收集的日志进行过滤规则以后再统一输出到存储区域。通常存储区包含以下几种:
elasticsearch:将收集到的数据发送到elasticsearch,其可以提供高效方便的格式化查询
file:将日志数据存储在文件当中
graphite:将日志存储到开源的时序数据库graphite当中,存储和聚合监控数据并绘制图表
statsd:这是一个监听服务,类似redis的使用,属于一个中间缓冲层,结合graphite一起使用
Codecs
Codecs是在输入和输出层的一个文本格式的编码器,支持json,msgpack和各种文本格式,如txt
json:对数据进行编码和解码成json格式
multiline:将多行的文本进行合并成单行的文本格式进行输出
2.3、Logstash的配置和运行
2.3.1、Logstash的目录结构
在通过RPM包安装Logstash后,我们可以看到有很多目录,通常了解一个软件的使用,对目录的使用了解也是非常有必要的,可以加深对Logstash设计的理解,其结构如下:
类型 | 描述 | 默认值 | 如何定义配置 |
---|---|---|---|
home | logstash安装的默认主目录 | /usr/share/logstash | |
bin | logstash的二进制脚本程序和logstash-plugin插件安装脚本 | /usr/share/logstash/bin | |
settings | 配置文件,包括logstash.yml、jvm选项配置、启动选项配置 | /etc/logstash | path.settings |
conf | logstash数据收集配置 | /etc/logstash/conf.d/*.conf | /etc/logstash/pipelines.yml |
logs | 日志文件 | /var/log/logstash | path.logs |
plugins | 插件目录 | /usr/share/logstash/plugins | path.plugins |
data | 数据持久化目录 | /var/lib/logstash | path.data |
2.3.2、Logstash的配置文件
Logstash主要有两种配置文件,分别是:logstash.yml和pipeline.yml,logstash.yml用于配置logstash的启动和执行相关配置,pipeline.yml用于配置流水线数据处理的配置。其中在安装完成后,还包含以下的配置文件:
logstash.yml:定义logstash的基础配置信息
pipeline.yml:定义数据收集规则的配置信息
jvm.options:定义JVM的总堆空间的最小值和最大值,也就是内存使用量,默认是1g
log4j2.properties:log4j2库的相关设置
startup.options:定义logstash启动时的相关配置
logstash.yml的详解:
配置参数 | 解析 | 默认值 |
---|---|---|
node.name |
节点名称定义 | 主机名 |
path.data |
持久化数据目录定义 | LOGSTASH_HOME/data |
pipeline.id |
pipeline的id号 | main |
pipeline.java_execution |
使用java执行引擎 | false |
pipeline.workers |
定义在过滤筛选和输出阶段的进程数量 | 默认为cpu的核心数 |
pipeline.batch.size |
定义在筛选和输出之前单次处理数据量大小,通常和jvm的堆内存值相关,值越大,jvm内存配置也需要更大 | 125 |
pipeline.batch.delay |
批处理数据的时间延迟,在数据量不达标时的延迟时间,单位为毫秒 | 50 |
pipeline.unsafe_shutdown |
在关机状态强制关闭logstash在处理的数据,会导致数据丢失 | false |
path.config |
pipeline的相关配置,通常在pipeline.yml中配置好 | |
http.host |
监听配置 | "127.0.0.1" |
http.port |
监听端口 | 9600 |
path.logs |
日志路径 | LOGSTASH_HOME/logs |
log.format |
日志格式 | 文本 |
path.plugins |
插件定义 |
2.4、Logstash实用举例
Logstash配置文件构建语法:
input {
...
}
filter {
...
}
output {
...
}
2.5、Logstash常用插件
2.5.1、input插件
Logstash 使用一个名叫 FileWatch
的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb
的数据库文件来跟踪被监听的日志文件的当前读取位置。sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。
配置示例如下:
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
stdout {
codec => rubydebug
}
}
tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我们在这个服务器A把日志通过nc发送到logstash上即可。
input {
tcp {
port => "5566"
mode => "server"
type => "tcplog"
}
}
output {
stdout {
codec => rubydebug
}
}
syslog支持RFC3164的系统日志格式,在logstash端进行tcp或upd的监听,从而实现对系统日志的收集。配置该日志收集,本机的syslog会默认发送到logstash,同时也要在rsyslog进行配置发送的监听地址。
# vim /etc/rsyslog.conf #修改rsyslog发送日志的监听端口
*.* @@192.168.56.100:44231
#配置logstash收集rsyslog发送的日志并标准输出
input {
syslog {
port => "44231"
}
}
output {
stdout {
codec => rubydebug
}
}
具体实现中,UDP 监听器只用了一个线程,而 TCP 监听器会在接收每个连接的时候都启动新的线程来处理后续步骤。所以在监听时,建议配置TCP的监听的性能会更佳。
2.5.2、filter插件
- date
- grok
- dissect
- geoip
- json
- kv
- metrics
- mutate
- ruby
- split
- elapsed
curl '192.168.56.100:9200/_cat/indices?v'
2.5.3、output插件
ELK提高篇之Logstash的更多相关文章
- ELK(Elasticsearch 、 Logstash以及Kibana)
配置日志收集系统 ELK需求背景:业务发展越来越庞大,服务器越来越多各种访问日志.应用日志.错误日志量越来越多,导致运维人员无法很好的去管理日志开发人员排查问题,需要到服务器上查日志,不方便运营人员需 ...
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- Java提高篇(三三)-----Map总结
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- Java提高篇(三一)-----Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过 ...
- java提高篇(三十)-----Iterator
迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...
- java提高篇(二九)-----Vector
在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...
- Java提高篇(二八)------TreeSet
与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap>中LZ详细讲解了TreeMap实现机制,如果 ...
- Java提高篇(二七)-----TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...
随机推荐
- ESA2GJK1DH1K基础篇: STM32+GPRS(AT指令版)实现MQTT源码讲解(支持Air202,SIM800)
前言 注: 本程序发送心跳包,发送温湿度,返回控制数据这三个发送是单独的,有可能凑到一起发. 由于本身程序就是复杂性的程序,所以这节程序没有使用中断发送,没有使用环形队列发送,为了避免多条消息可能凑到 ...
- vue+element 表格筛选
筛选是element 组件 自己有的东西,按照文档撸 是没有问题 这里存在一个情况是,如果 筛选 的数据没有 那么整个表格为空白,产品要加提示 例如:暂无筛选的数据 解决方案:通过 ref 获取整 ...
- 【Gamma阶段】第八次Scrum Meeting
冰多多团队-Gamma阶段第八次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 编辑器风格切换(添加夜间模式) UI界面手势切换 牛雅哲 添加pytorch训练dict和ssh工具 ...
- 【06月10日】A股ROE最高排名
个股滚动ROE = 最近4个季度的归母净利润 / ((期初归母净资产 + 期末归母净资产) / 2). 查看更多个股ROE最高排名 兰州民百(SH600738) - ROE_TTM:86.45% - ...
- CentOS7 下 yum 安装 Docker CE
前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker 官网有安装步骤,本文只是记录 ...
- git 命令行回退到某个指定的版本
1.在开发过程中遇到合并别人的代码或者合并主分支的代码导致自己的分支代码冲突或有别的问题,这时我们需要回退某个git提交历史的代码 用一下命令 git reset --hard 139dcfaa558 ...
- Shuffle an Array (水塘抽样)
随机性问题 水塘抽样算法可保证每个样本被抽到的概率相等 使用场景:从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况 Knuth洗牌算法 ...
- Effective.Java第12-22条
12. 始终重写toString()方法 如果不重写toString()方法,打印的时候是 类名+@+哈希码的无符号十六进制.我们查看 Object的toString()方法如下: public S ...
- Java并发编程基础-Unsafe
前言:Unsafe是Java中一个底层类,包含了很多基础的操作,比如数组操作.对象操作.内存操作.CAS操作.线程(park)操作.栅栏(Fence)操作,JUC包.一些三方框架都使用Unsafe类来 ...
- python 知识回顾
第一章:搭建编程环境1.在Windows系统中搭建Python编程环境. 1.1 安装Python 访问http://python.org/downloads/ ,点击下载到本地,后安装. 1.2安装 ...