共计 6008 个字符,预计需要花费 16 分钟才能阅读完成。
ES 负责存储、分析数据,但是这一切前提是需要有数据,ES 本身是不能够收集数据的,数据的收集如何来做呢?我们可以通过两个软件来实现数据的收集,那就是:
Logstash: 收集、处理数据然后交给 ES
Beats: 收集数据交给 ES
两者不同点在于 Logstash 能够更像一个数据中转站,它能够收集数据,并且对收集的数据进行处理,所以 logstash 消耗的计算机资源也是比较大的。Beats 只负责收集数据,将数据收集后交给 ES,和 logstash 相比其消耗的计算机资源更少,可以忽略。
一、logstash 介绍
logstash 是一个开源的数据采集工具, 通过数据源采集数据. 然后进行过滤, 并自定义格式输出到目的地。
数据分为:
- 结构化数据 如:mysql 数据库里的表等
- 半结构化数据 如: xml,yaml,json 等
- 非结构化数据 如: 文档, 图片, 音频, 视频等
logstash 可以采集任何格式的数据, 当然我们这里主要是讨论采集系统日志, 服务日志等日志类型数据。
官方产品介绍:https://www.elastic.co/cn/products/logstash
input 插件: 用于导入日志源 (配置必须)
https://www.elastic.co/guide/en/logstash/current/input-plugins.html
filter 插件: 用于过滤 ( 不是配置必须的)
https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
output 插件: 用于导出 ( 配置必须)
https://www.elastic.co/guide/en/logstash/current/output-plugins.html
二、logstash 安装部署
a、安装前准备
机器准备:node3
- 静态 IP(要求能上公网, 最好用虚拟机的 NAT 网络类型上网)
- 主机名及主机名绑定
- 关闭防火墙和 selinux
- 时间同步
- yum 源(centos 安装完系统后的默认 yum 源就 OK)
安装前准备参考 https://www.zutuanxue.com/home/4/52_138
本文通过自定义脚本 init_linux_os.sh 脚本来完成
# cat init_linux_os.sh
#!/bin/bash
#Description: initialize linux OS from ZUTUANXUE(http://www.zutuanxue.com)
#Release: 1.0
#Auther: www.zutuanxue.com
#Email:
#OS: Centos 8.X
################
hosts() {echo "" > /etc/hosts
cat >> /etc/hosts<<EOF
127.0.0.1 localhost
::1 localhost
192.168.98.200 manage01
192.168.98.201 node1
192.168.98.202 node2
192.168.98.203 node3
192.168.98.204 node4
EOF
}
################
cat <<EOF
#Description: initialize linux OS from ZUTUANXUE(http://www.zutuanxue.com)
#Release: 1.0
#Auther: www.zutuanxue.com
#Email:
#OS: Centos 8.X
#1、disable firewall
#2、disable selinux
#3、set chrony client
EOF
#
hosts
#disable fireall
systemctl disable firewalld
systemctl stop firewalld
iptables -F
iptables -t nat -F
#disable selinux
sed -i -r '/SELINUX=/c\SELINUX=disabled' /etc/selinux/config
#set chrony client
sed -i.bak '/^pool 2.centos.pool.ntp.org iburst$/s//#/' /etc/chrony.conf
cat >> /etc/chrony.conf <<EOF
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
server ntp4.aliyun.com
EOF
if systemctl restart chronyd.service;then
echo -e "\033[32m SUCCESS \033[0m"
else
echo -e "\033[31m FAIL \033[0m"
exit 1
fi
b、安装部署
因为 logstash 也是基于 java 开发的,所以安装之前先要解决运行环境问题,需要安装 jdk.
1) 安装 jdk
2) 安装 logstash
安装 jdk-13.0.2
参考5.2.1
本文通过自定义脚本 elk_install.sh 安装
[root@node3 es_install]# sh elk_install.sh jdk
警告:jdk-13.0.2_linux-x64_bin.rpm: 头 V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
jdk-13.0.2 install success
安装 logstash
安装方法:
- yum
- rpm
- 源码
我依然采用 rpm 安装,如果安装 ES 的时候设置过 yum 源,可以直接使用命令:
yum -y install logstash
[root@node3 ~]# rpm -i logstash-7.6.0.rpm
警告:logstash-7.6.0.rpm: 头 V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
Using provided startup.options file: /etc/logstash/startup.options
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.headius.backport9.modules.Modules to method sun.nio.ch.NativeThread.signal(long)
WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/pleaserun-0.0.30/lib/pleaserun/platform/base.rb:112: warning: constant ::Fixnum is deprecated
Successfully created system startup script for Logstash
c、目录及文件
安装目录:/usr/share/logstash
配置文件目录: /etc/logstash/
[root@node3 logstash]# tree
.
├── conf.d # 业务配置文件,空目录 *.conf 从哪里采集日志,送到哪里去
├── jvm.options
├── log4j2.properties
├── logstash-sample.conf # 数据收集模板文件
├── logstash.yml # 配置文件
├── pipelines.yml
└── startup.options # 启动参数
1 directory, 6 files
d、启动管理
开机启动
[root@node3 logstash]# systemctl enable logstash
Created symlink /etc/systemd/system/multi-user.target.wants/logstash.service → /etc/systemd/system/logstash.service.
启动服务
[root@node3 logstash]# systemctl start logstash
注意第一次安装未配置是无法启动的,应为没有业务配置文件在 conf.d 下面
命令行启动验证
[root@node3 logstash]# /usr/share/logstash/bin/logstash -e 'input {stdin {}} output {stdout {}}'
# 自己输给自己
运行在前台,ctrl+ C 终止
如图,看到启动成功就可以了
e、查看启动
启动成功后可以查看一下 logstash 启动情况,使用 netstat 命令。
[root@node3 logstash]# netstat -ntpl
三、配置 logstash 服务监听地址为本机网卡 IP
[root@node3 ~]# vim /etc/logstash/logstash.yml
# ------------ Metrics Settings --------------
#
# Bind address for the metrics REST endpoint
#
http.host: "0.0.0.0" # 删除 #号,输入本机网卡地址或 0.0.0.0, 顶格写
#
# Bind port for the metrics REST endpoint, this option also accept a range
# (9600-9700) and logstash will pick up the first available ports.
#
# http.port: 9600-9700
配置业务后启动查看
四、收集本机 messages 日志给 ES
业务架构
这里以 /var/log/messages 为例, 只定义 input 输入和 output 输出, 不考虑过滤
配置业务文件存储在 conf.d 下
[root@node3 logstash]# cat /etc/logstash/conf.d/logstash_to_es_messages.conf
# 采集日志位置
input {
file {path => "/var/log/messages" # 日志文件路径
start_position => "beginning" # 收集日志开始的位置点
}
}
# 输出给 ES
output {
elasticsearch{hosts => ["192.168.98.201:9200"] #ES 地址
# 数据保存的索引名字 test-YYYY-MM-DD 按日期生成索引
index => "test-%{+YYYY.MM.dd}"
}
# 输出到屏幕一份,dubug 使用, 前台启动 Logstash 排错有用
#stdout {
# codec => rubydebug
# }
}
注意问题
设置 /var/log/messages 文件权限,让 logstash 能读取
logstash 进程管理用户 logstash
/var/log/messages 文件权限 400
[root@node3 logstash]# ls /var/log/messages -l
-rw------- 1 root root 374743 2月 15 05:08 /var/log/messages
[root@node3 logstash]# chmod 644 /var/log/messages
启动 logstash 生效设置
[root@node3 logstash]# systemctl restart logstash
查看启动日志
[root@node3 ~]# tail -f /var/log/logstash/logstash-plain.log
看到上图选择的内容就说明成功了。
验证监听地址
[root@node3 ~]# netstat -ntpl
验证 ES 数据,通过 ES-head 查看数据情况
通过浏览器登陆:http://192.168.98.201:9100
看到数据索引,成功了。
五、logstash 多日志收集
实验注意: 清除上一个收集 Messages 的业务配置文件
清除 ES 的索引,方便查看,此条不是必须
** 案例:** 实验日志文件收集
/var/log/messages 索引 message-%{+YYYY.MM.dd}
/var/log/dnf.rpm.log 索引 dnf-%{+YYYY.MM.dd}
思路
1、(input)收集日志同时给不同的日志打标签区别
2、(output)根据不同的数据标签将不同数据输出到 ES 不同索引
[root@node3 ~]# cat /etc/logstash/conf.d/logstash_to_es_mutl_log.conf
input {
file {path => "/var/log/messages"
start_position => "beginning"
type => "messages" # 给每条数据打标签
}
file {path => "/var/log/dnf.rpm.log"
start_position => "beginning"
type => "dnf"
}
}
output {if [type] == "messages" {
elasticsearch {hosts => ["192.168.98.201:9200"]
index => "message-%{+YYYY.MM.dd}"
}
}
if [type] == "dnf" {
elasticsearch {hosts => ["192.168.98.201:9200"]
index => "dnf-%{+YYYY.MM.dd}"
}
}
}
重启 logstash 验证 ES 数据
[root@node3 logstash]# systemctl restart logstash
查看 ES-head web 页面 概览 标签,查看数据索引
通过 数据浏览 标签,查看原始数据我们自定义的标签。
完美,多日志收集成功。