介绍
介绍
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。
由于Logstash基于JAVA,JAVA是出了名的吃内存,所以我们尽量只部署一个Logstash环境,收集工作就交给Filebeat来负责。
基本信息
安装环境
CentOS:CentOS Linux release 7.6.1810 (Core)
Linux:Linux version 3.10.0-1062.el7.x86_64
GCC:gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
软件版本
logstash-7.2.0.tar.gz
验证时间
2020/01/07
准备工作
本地化
timedatectl set-timezone Asia/Shanghai
安装wget
如果环境里没有wget,通过yum安装一下
yum -y install wget
建立环境根目录
mkdir -p /tongfu.net/env/
建立安装包目录并进入
mkdir /packages cd /packages
安装Logstash7
下载
logstash
下载页面
https://www.elastic.co/cn/downloads/logstash
下载软件
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.2.0.tar.gz
JDK
必须通过网页下载,需要勾选“接受协议”,所以不能用wget直接下载了!
网页地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
安装
JDK
tar -xzvf jdk-8u192-linux-x64.tar.gz -C /tongfu.net/env/
logstash
直接解压缩即可
tar -xzvf logstash-7.2.0.tar.gz -C /tongfu.net/env/
配置
配置JDK
echo "export JAVA_HOME=/tongfu.net/env/jdk1.8.0_192" >> /etc/profile echo "export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar" >> /etc/profile source /etc/profile
设置JVM参数
[root@tongfunet]# vi /tongfu.net/env/logstash-7.2.0/config/jvm.options -Xms1g -Xmx1g
使用
通过文件输入
通过监听本地文件的内容变化,增量读取数据
一般情况下,我们不会把 logstash 和应用程序安装到一起,所以这种情况比较少见
可以设置多组文件进行监听
[root@tongfunet]# vi /tongfu.net/env/logstash-7.2.0/config/test.conf input { file { path => "/tongfu.net/logs/nginx-1.12.2/logs/access.log" codec => json } }
通过 beats 输入
通过建立 beats 服务端口,被动接收数据
这种情况的使用场景比较广泛,配合 filebeat 进行数据的多渠道收集集中处理
可以设置多组 beats 监听多个端口
[root@tongfunet]# vi /tongfu.net/env/logstash-7.2.0/config/test.conf input { beats { port => "5044" codec => json } }
输出到 ElasticSearch
采集到的数据经过加工处理后就可以存储起来了
一般情况下,存储到 ElasticSearch 是比较广泛的做法
[root@tongfunet]# vi /tongfu.net/env/logstash-7.2.0/config/test.conf output { elasticsearch { hosts => ["http://10.16.1.111:9200"] index => "test_log" } }
过滤
通过 filter 关键字对输入数据进行加工处理
[root@tongfunet]# vi /tongfu.net/env/logstash-7.2.0/config/test.conf filter { mutate { } grok { } geoip { } ... }
启动
我们通过下面的命令启动logstash
参数config.reload.automatic用来启动自动配置文件重新加载,因为logstash启动过程非常的慢,所以每次修改配置文件后让logstash自己重新加载配置文件,这样可以节省很多时间
cd /tongfu.net/env/logstash-7.2.0/ ./bin/logstash -f ./config/test.conf --config.reload.automatic
完整的启动命令
载入环境变量,后台运行logstash,并写入日志
source /etc/profile nohup /tongfu.net/env/logstash-7.2.0/bin/logstash -f /tongfu.net/env/logstash-7.2.0/config/logstash.conf --config.reload.automatic > /tongfu.net/env/logstash-7.2.0/logs/logstash.log 2>&1 &
Filter
在 filter 内部编写数据加工处理逻辑,可以包含 mutate、geoip 等等
可以使用 if 条件编写不同数据的不同加工处理逻辑
Grok
通过 grok 进行数据的正则表达式替换
Mutate
通过 mutate 进行修改数据字段,添加数据字段,数据转换
语法
add_field
添加新字段到结果数据
add_field => { "new_field" => "%{[some_field]}" "new_field2" => "%{[some_parent_field][some_child_field]}" }
remove_field
删除结果数据的现有字段
remove_field => ["agent", "input"]
if
使用条件语句
if [host] == "apache2" { file { path => "/var/log/apache2.log" } } if [host] == "nginx" { file { path => "/var/log/nginx.log" } }
使用 in 语法
if "access.log" in [log][file] { file { path => "/var/log/access.log" } } if "error.log" in [log][file] { file { path => "/var/log/error.log" } }
GeoIP
安装GeoIP
安装软件
yum -y install geoip
下载数据库
wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
安装数据库
tar -xzvf GeoLite2-City.tar.gz cp GeoLite2-City_20190723/GeoLite2-City.mmdb /usr/share/GeoIP/
更新数据库
geoipupdate
配置示例
标准配置示例
这里我们提供一个标准的配置文件示例,基本满足大部分需求
# 提供两个 beats 5044 5045 # 5044 用来接收json数据 # 5045 用来接收普通文本 input { beats { add_field => {"data_type"=>"json"} port => "5044" codec => json } beats { add_field => {"data_type"=>"text"} port => "5045" } } # 过滤器 # json数据单独处理 # text数据单独处理 filter { if [data_type] == "json" { mutate { } geoip { } ... } if [data_type] == "text" { ... } } # 输出 # json类型数据的access.log文件数据存储到索引access_log里 # json类型数据的error.log文件数据存储到索引error_log里 # text类型数据丢弃 output { if [type] == "json" and "access.log" in [log_file] { elasticsearch { hosts => ["http://10.16.1.111:9200"] index => "access_log" } } if [type] == "json" and "error.log" in [log_file] { elasticsearch { hosts => ["http://10.16.1.112:9200"] index => "error_log" } } }
常见错误
常见错误1
错误信息:
URI is not valid - host is not specified
原因:
输出到 elasticsearch 的主机不能使用域名,换成 IP 地址即可解决