logstash简介
- Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据存储到指定的位置。
- Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。
注:就写这么多了,等抽空的时候,把这个ELK三件套单独作为一篇文章进行详谈。
- 官网:https://www.elastic.co/cn/
安装
下载logstash
注:需要实现准备jdk环境(我的在安装es的时候已经设置jdk环境了,这里就直接跳过)
# cd /opt/src/
# wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.2.zip #我的ES是安装的5.5.2版本这个logstash也选择一样(建议版本一样,不然会出莫名奇妙的问题)
新建logstash用户(不建议以root用户直接进行运行)
# groupadd -g549 logstash && useradd -g 549 -u 549 -s /sbin/nologin logstash
安装
# yum install zip unzip -y
# mkdir /opt/app/ #主程序目录(已有就不用安装)
# unzip logstash-5.5.2.zip
# mv logstash-5.5.2 /opt/app/
# ln -s /opt/app/logstash-5.5.2/ /opt/app/logstash
创建对应的目录及授权
# mkdir -p /data/app/logstash/run
# mkdir -p /data/app/logstash/data
# mkdir -p /data/app/logstash/etc
# mkdir -p /data/logs/logstash
# chown logstash.logstash -R /data/app/logstash/
# chown logstash.logstash -R /data/logs/logstash/
编辑配置文件
# cp /opt/app/logstash/config/logstash.yml{,.bak}
# vim /opt/app/logstash/config/logstash.yml #只要是控制logstash的运行状态
path.data: /opt/app/logstash/data/
pipeline.workers: 2
pipeline.output.workers: 1
pipeline.batch.size: 125
path.config: /opt/app/logstash/etc
config.reload.automatic: false
config.reload.interval: 3
path.logs: /data/logs/logstash
注:上面是常用的一些配置,下面对整个配置内容进行了一个大概的介绍
#其他设置
ode.name: test #为节点添加描述
pipeline.id #管道ID
path.plugins: #自定义插件路劲
#data路劲
path.data: #logstash工作目录(插件也放这下面),默认是logstash_home/data下面
#pipeline 设置
pipeline.workers: 32 #设置logstash的工作线程数,默认是cpu的核心数
pipeline.output.workers: 4 #每个输出实例最多使用几个线程
pipeline.batch.size: 125 #设置单个线程处理文件的最大事件数,如果此值调高,可以更加容易批量处理文件,但是会增加内存开销,那就需要增加jvm.options配置文件中的JVM堆空间
pipeline.batch.delay: 5 #创建管道进行批量处理事件时,每个事件等待时间为多久(单位毫秒)
#pipeline 配置文件设置
path.config: /opt/app/logstash/etc #logstash的pipeline配置路劲
config.string #指定phpilne配置的字符串文件,使用与配置文件相同的语法
config.test_and_exit: false #为ture,启动服务,测试配置文件是否有效,并退出
config.reload.automatic: false #为ture时,定期检查配置是否生效,并且在更改配置时,重新自动加载配置
config.reload.interval: 3 #多久检查一次配置配置(默认单位为s)
#队列
queue.type: memory #指定事件缓存内部队列模型分为memory(队列存放于内存中)及persisted(基于磁盘的ACKed队列,实现持久化),
path.queue: #启用持久化队列数据文件存放路劲
queue.page_capacity: 250mb #指定启用持久化页面数据文件大小,队列数据由仅附加的数据文件组成,这个些文件被分割为多个页面,默认是250M。
queue.max_events: 0 #指定在persisted队列中,未读事件的最大数目,为0时,无限制,默认为0.
queue.max_bytes: 1024mb #队列的总容量。通过增大此值,可以缓冲更多的未读时间,当queue.max_events和queue.max_bytes都指定,Logstash选择第一达到条件的(默认值是1024MB)
queue.checkpoint.acks: 1024 #启用persisted,在强制检查之前确认最大事件数,默认是1024,0无限制
queue.checkpoint.writes: 1024 #启用persisted,在强制检查之前写入最大事件数,默认是1024,0无限制
queue.checkpoint.interval: 1000 #启用persisted,强制检查的时间间隔(毫秒),默认1000,0无限制
#死信队列(主要存放logstash中映射错误,以及对响应无法处理的事件,在logstash默认是将这些事件挂机或者删除,只要开启死信队列功能,就会存储这些数据,以便分析)
dead_letter_queue.enable: false #是否启用死信队列,默认是false没有启用
dead_letter_queue.max_bytes: 1024mb #指定死信队列的最大大小,超过此值将删除条目,默认是1024(可以增大)
path.dead_letter_queue: #指定死信队列数据存放路劲
#指标设置
http.host: "127.0.0.1" #REST端点的绑定地址
http.port: 9600-9700 #REST端点绑定的端口,也可以是一个范围,logstash将获取第一个可用的端口
#日志设置
log.level: info #设置日志级别(fatal error warn info (default) debug trace)
path.logs: #日志存储路劲
配置startup.options
# vim /opt/app/logstash/config/startup.options #存放logstash需要的参数
JAVACMD=/opt/app/jdk/bin/java #填写你的java路劲
LS_HOME=/opt/app/logstash #服务主程序目录
LS_SETTINGS_DIR="${LS_HOME}/config" #简单来说是你服务的conf目录位置(默认即可)
LS_OPTS="--path.settings ${LS_SETTINGS_DIR}" #Arguments to pass to logstash(翻译的我也看不懂,默认即可)
LS_JAVA_OPTS=/opt/app/jdk #填写jdk路劲即可
LS_PIDFILE=/opt/app/logstash/run/logstash.pid #针对sysv用户启动提供设置的(就是ini.d启动用户)
LS_USER=logstash #用户
LS_GROUP=logstash #组
LS_GC_LOG_FILE=/data/logs/logstash/gc.log #指定gc日志存放位置
LS_OPEN_FILES=16384 #打开文件限制(选择默认即可)
LS_NICE=19 #默认即可
SERVICE_NAME="logstash" #文档说明,运行多个logstash实例时非常有用
SERVICE_DESCRIPTION="logstash"
创建logstash环境变量文件
JAVACMD="/opt/app/jdk/bin/java"
LS_HOME="/opt/app/logstash"
LS_SETTINGS_DIR="/opt/app/logstash/config"
LS_PIDFILE="/opt/app/logstash/run/logstash.pid"
LS_USER="logstash"
LS_GROUP="logstash"
LS_GC_LOG_FILE="/data/logs/logstash/gc.log"
LS_OPEN_FILES="16384"
LS_NICE="19"
SERVICE_NAME="logstash"
SERVICE_DESCRIPTION="logstash"
创建logstash.service文件
# vim /etc/systemd/system/logstash.service
[Unit]
Description=logstash
[Service]
Type=simple
User=logstash
Group=logstash
EnvironmentFile=-/etc/default/logstash
#ExecStart=/opt/app/logstash/bin/logstash
ExecStart=/opt/app/logstash/bin/logstash --path.settings /opt/app/logstash/config
ExecStop=/bin/kill -s QUIT \$MAINPID
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384
[Install]
WantedBy=multi-user.target
测试:
# /opt/app/logstash/bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}' #回车输入下面内容
hello world
{
"message" => "hello world",
"@version" => "1",
"@timestamp" => " ",
"host" => "atman081.atmandomain"
}
回车 看下是不是显示下面内容
{
"@timestamp" => 2019-09-26T11:12:17.695Z,
"@version" => "1",
"host" => "test",
"message" => "\thello world"
}
# ps aux | grep logstash #然后看下有没有对应的进程出现,出现了就代表安装成功了,如果使用system方式启动的话,最好指定定义的监控日志才行