1、Logstash环境准备
关闭防火墙
#CentOS6 关闭防火墙
[root@logstash-53 ~]# /etc/init.d/iptables stop
#CentOS7 关闭防火墙
[root@logstash-53 ~]# systemctl stop firewalld
关闭SELINUX
#临时关闭
[root@logstash-53 ~]# setenforce 0
setenforce: SELinux is disabled
#永久关闭
[root@logstash-53 ~]# vim /etc/sysconfig/selinux
SELINUX=disabled ==> //原来是enforcing 改成disabled
设置epel源
#CentOS6 下载epel源
[root@logstash-53 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#CentOS7 下载epel源
[root@logstash-53 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
修改时区
#将时区修改为上海时区
[root@logstash-53 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp:是否覆盖"/etc/localtime"? y
设置时间同步
#同步服务器时间(切记保证集群之间时间一致非常重要)
[root@logstash-53 ~]# ntpdate time1.aliyun.com
28 Feb 14:11:28 ntpdate[8904]: step time server 203.107.6.88 offset 3168820.831817 sec
#加入定时任务
[root@logstash-53 ~]# crontab -l
# 时间同步
*/5 * * * * ntpdate time1.aliyun.com > /dev/null 2>&1
2、部署Logstash
Logstash是一个开源的数据收集引擎,可以水平伸缩,而且logstash整个ELK当中拥有最多插件的一个组件,其可以接收来自不同来源的数据并统一输出到指定的且可以是多个不同目的地。
1)安装JDK环境
下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
#解压JDK安装包
[root@logstash-53 ~]# tar xf jdk-8u121-linux-x64.tar.gz
#将JDK安装包移动到安装目录下
[root@logstash-53 ~]# mv jdk1.8.0_121 /usr/local/
#做软链接(方便日后升级)
[root@logstash-53 ~]# ln -s /usr/local/jdk1.8.0_121 /usr/local/jdk1.8
#添加环境变量
[root@logstash-53 ~]# vim /etc/profile.d/jdk1.8.sh
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
#加载环境变量
[root@logstash-53 ~]# source /etc/profile
#检查是否加载成功
[root@logstash-53 ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
#创建软连接(否则会有启动报错)
[root@logstash-53 ~]# ln -s /usr/local/jdk/bin/* /usr/bin/
2)安装Logstash
下载地址: https://www.elastic.co/downloads/past-releases/logstash-5-3-0
#安装Logstash使用yum localinstall 自动安装依赖包
[root@logstash-53 ~]# yum localinstall -y logstash-5.3.0.rpm
#给Logstash目录授权
[root@logstash-53 ~]# chown -R logstash.logstash /usr/share/logstash/
3、Logstash输入输出插件介绍
INPUT、OUTPUT插件
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(用户数据报协议) | | |
4、Logstash输入输出插件测试
1)测试logstash标准输入到标准输出
#从标准输入到标准输出
[root@elkstack03 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug }}'
#标准输入zls test及返回结果
zls test
{
#时间戳
"@timestamp" => 2019-03-05T09:41:40.198Z,
#版本信息
"@version" => "1",
#主机
"host" => "0.0.0.0",
#接收信息
"message" => "zls test"
}
结果展示如下图所示:
2)测试logstash标准输入到文件
#从标准输入到文件中
[root@elkstack03 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { file { path => "/tmp/test_%{+YYYY.MM.dd}.log"}}'
#输入bgx ugly
bgx ugly
#返回结果
19:10:00.303 [[main]>worker0] INFO logstash.outputs.file - Opening file {:path=>"/tmp/test_2019.03.05.log"}
#查看tmp目录下是否有日志文件存在
[root@elkstack03 ~]# ll /tmp/
总用量 4
-rw-r--r-- 1 root root 95 3月 5 19:10 test_2019.03.05.log
#查看日志内容
[root@elkstack03 ~]# cat /tmp/test_2019.03.05.log
{"@timestamp":"2019-03-05T11:10:00.235Z","@version":"1","host":"0.0.0.0","message":"bgx ugly"}
结果展示如下图所示:
3)测试logstash标准输入到ES
#从标准输入到Elasticsearch
[root@elkstack03 ~]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch {hosts => ["10.0.0.51:9200"] index => "zls_%{+YYYY.MM.dd}" }}'
#输入内容
zls test stdin to ES
#在Elasticsearch中查看数据结果
[root@elkstack01 ~]# ll /data/elk/data/nodes/0/indices/
总用量 8
drwxr-xr-x 9 elasticsearch elasticsearch 4096 3月 5 17:19 C8o7IxEVR2W7CpPFFCa4cA
drwxr-xr-x 9 elasticsearch elasticsearch 4096 3月 5 19:35 R8IZGhT4Sw2XukCiG1O02A
结果展示如下图所示:
打开浏览器,访问:http://10.0.0.51:9100