装logstash(使用yum安装)

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

添加此文件和内容

vim /etc/yum.repos.d/logstash.repo
[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3.安装logstash

yum install -y logstash

4.程序启动文件位置

/usr/share/logstash/bin/logstash

5.建立软连接到环境变量位置,方便日后使用

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/logstash

  

1.创建文件夹 推荐这种方式安装

mkdir /usr/local/logstash
cd /usr/local/logstash

2.下载包 https://www.elastic.co/cn/downloads/past-releases 包下载地址 下载logstash-oss版本

wget https://artifacts.elastic.co/downloads/logstash/logstash-oss-7.7.0.tar.gz

3.解压

tar -zxvf logstash-oss-7.7.0.tar.gz

4.配置环境变量

vim /etc/profile source /etc/profile
export PATH=$PATH:/usr/local/logstash/logstash-7.7.0/bin

5.修改配置文件

vim /usr/local/logstash/logstash-7.7.0/config/logstash.yml
node.name # 节点名称 方便识别
path.data # 持久化存储数据的文件夹,默认是logstash home目录下的data
path.config # 设定pipeline配置文件目录
path.log # 设定pipeline日志文件目录
pipeline.workers # 设定pipeline的线程数
pipeline.batch.size/delay # 设定批量处理数据的数目和延迟
queue.type # 设定队列类型默认是memory 改成queue.type:persisted
queue.max_dytes # 队列总容量 默认是1024mb 改成queue.max_dytes:4096mb

6.简单使用

执行如下命令,进行快速测试(标准输入–> 标准输出)
logstash -e 'input {stdin{}} output {stdout{}}'

7.logstash常用参数

-e :指定logstash的配置信息,可以用于快速测试;
-f :指定logstash的配置文件;可以用于生产环境;

logstash 多实例运行方式
logstash --path.setting instance1 # instance1是cp /usr/local/logstash/logstash-7.7.0/config /usr/local/logstash/logstash-7.7.0/instance1 打开instance1/logstash.yml 修改node.name和path.data和path.config 保证不一样
logstash --path.setting instance2
不同的instance中修改longstash.yml,自定义path.data 确保其不同即可

8.一个实例多个配置文件

logstash -f /usr/local/logstash/config/conf -r  # /usr/local/logstash/config/conf:是放置配置文件的路径,启动时候制定路径就可以
我们可以把多个配置文件放到/usr/local/logstash/config/conf路径中
cp ck-logstash.conf /usr/local/logstash/config/conf
cp ck-logstash_yun.conf /usr/local/logstash/config/conf

pipeline配置语法

1.数据类型

boolean
    - isFailed => true
数值型
    - port => 33
字符串
    - name => "hello world"
数组
    path => ["/root", "/home"]
哈希
    match => {
    'field1' => "value1"
    'field2' => "value2"
    }
注释
    # this is a comment # 表示注释

2.在配置中引用logstash event的属性

直接应用
    if[request]   # 使用[]
字符串sprintf方式
    "request is %{request}"  # 使用 %{}

3.if

if true{
.....
}else if true{
.....
}else{
.....
}

4.表达式  

==, !=, <, >, <=, >=  # 比较
=~, !~,  # 正则是否匹配
in, not in  #  包含或者不包含
and, or , nand, xor, !  # 布尔操作符
{}  # 分组操作符

5.imput plugin

input 插件是指定数据输入源,-个pileline可以有多个input插件
stdin   # 标准标准输入,就是在命令行上输入
    Codec # 类型为codec
    type # 类型为string,自定义改事情类型,可用于后续判断
    tags  # 类型为array,自定义该事件tag,可用于后续判断
    add_field  # 类型为hash,为该事件添加字段
file
    path  # 类型是数组,指明读取文件的路径基于glob匹配 path => ["/var/log/**/*.log"]
    exclue  # 类型为数组排除不行监听的文件规则,基于glob匹配语法 exclue => "*.gz"
    sincedb_path  # 类型为字符串,记录sincedb文件路径
    start_postion  # 类型为字符串,beginning or end,是否从头读取文件beginning:从头开始读  end:当前开启的时候开始读
        start_position => "beginning"  # 从头读取,记录会存在sincedb中: 下次启动也以前读过的数据不会在重复读取
        可以删除sincedb文件 让重启的时候从头开始读取
            find / -name .sincedb_*  查找  然后删除查找出来的文件
                /usr/local/logstash/logstash-7.7.0/data/plugins/inputs/file/.sincedb_32d545544e69851bf16f654e4bdeec4a
                /usr/local/logstash/logstash-7.7.0/data/plugins/inputs/file/.sincedb_6186b45d486441e4a13c8fc65c76d586
        sincedb_path => "/dev/null"   # 配合调试使用 加上 start_position => "beginning" 每次重启读会从头读取一遍
    start_interval # 类型为数值,单位是秒,定时检查文件是否有更新,默认是1秒
    discover_interval # 类型为数值,单位是秒,定时检查是否有新文件呆读取,默认是16秒
    ignore_older  # 类型是数组,单位是秒,扫描文件列表,如果该文件上次更改时间超过设定时长,则不做处理,单依然会健康是否有新内容,默认关闭
    close_older  # 类型是位置,单位是秒,如果监听的文件在超过该设定的时候没有新的内容.会被关闭文件句柄,释放资源,单依然会监控释放有新内容,默认是3600秒,即一个小时
    glob 匹配语法
        * # 匹配任意字符,
        **  # 递归匹配之目录  /var/log/**/*.log  匹配/var/log目录及纸目录下的所有log文件
        ?  # 匹配单一字符
        []  # 匹配多个字符 [a-z]
        {}   # 匹配多个单纯 {"a", "b", "b"}
        \  # 转义字符
kafka
    kafka是最流行的消息队列,也是elastic stack架构中常用的,使用相对简单
    input{
        kafka{
            zk_connect => "kafka:2181"   # 连接地址
            group_id => "logstash"
            topic_id = > "apache_logs"
            consumer_threads => 16   # 线程
        }
    }

6.codec plugin

codec plugin 作用于input和output plugin,负责将数据在原始与logstash event之间转换,创建的codec有
plain  # 读取原始内容
dots  # 将内容简化为点进行输出
rubydedug  # 将logstash events 安装ruby格式输出,方便调试
line  # 处理带换行符的内容
json  # 处理json格式数据
nultiline  # 处理多行数据内容

7.filter plugin

filter是logstash功能强大的主要原因,它可以对logstash event进行丰富的处理,比如解析数据,删除字段,类型转换等等,常见有如下几个
data 日期解析
grok 正则匹配解析
dissect 分隔符解析
mutate 对字段处理,比如重命名,删除,替换
json 安装json解析字段内容到制定字段中
geoip 增加地理位置数据
ruby 利用ruby代码来动态修改logstash event

8.Output plugin

负责将logstash event输出,创建的创建如下
stdout # 标准输出
file  # 输出到文件
elasticsearch

9.建设阶段建议大家使用如下配置

http 作为input,方便输入测试数据,并且可以结合reload特征(stdin无法reload)
stdout做output,codec使用rubydebug,及时查看解析结果
测试错误输入情况下输出,以便对错误情况进行处理
input{http{port=>7474}}
filter{}
output{stdout{codec=>rubydebug}}