logstash之input插件

logstash之input插件

标准输入

input{
    stdin{
        add_field => {"key" => "value"}
        codec => "plain"
        tags => ["add"]
        type => "std"
    }
}
output{
    stdout{
        codec => rubydebug{}
    }
    elasticsearch{
        hosts=>["127.0.0.1"]
    }
}

文件输入

input{
    file{
        path => ["/home/wuyong/elk/logs/test1.log", "/home/wuyong/elk/logs/test2.log"]
        type => "system"
        start_position => "beginning"
    }
}
output{
    stdout{
        codec => rubydebug{}
    }
    elasticsearch{
        hosts=>["127.0.0.1"]
    }
}

其它配置:

  • discover_interval: logstash每隔多久检测一次被监听的path下是否有新文件,默认15s
  • exclude: 不想被监听的文件列表
  • sincedb_path: 定义sincedb配置的路径,默认路径如下:
    input_file_sincedb

  • sincedb_write_interval,每个多久写一次sincedb文件,默认15s

  • stat_interval, 没隔多久检测一次被监听文件状态(是否有更新),默认1s
  • start_position: 从什么位置读取文件数据,默认结束位置,如果需导数据,则设置成beginning,从开始位置读取; 仅在该文件从未被监听过才有效,因为sincedb文件记录了该文件的inode,会从记录过的pos开始读,需要重复读取一个日志,可以删除sincedb文件或定义sincedb_path为/dev/null
  • close_older: 一个已经监听中的文件,超过这个值的时间内没更新内容,就关闭监听它的文件句柄,默认3600s
  • ingore_older: 每次检测文件列表的时候,如果一个文件的自后修改时间超过该值,就忽略这文件,默认86400s即1天

path

  • path不支持
path => "/path/to/%{+yyyy/MM/dd/hh}.log"

格式, 只能写成

path => "/path/to/*/*/*/*.log" 或
path => "/path/to/**/*.log" , **缩写表示递归全部子目录

TCP输入

  • 适用于临时任务,尤其是测试环境,因为logstash本身只能在SizeQueue中缓存20个事件,所以生产环境中最好换用其他消息队列
input{
    tcp{
       port => 8888
       mode => "server"
       ssl_enable => false
    }
}
output{
    stdout{
        codec => rubydebug{}
    }
    elasticsearch{
        hosts=>["127.0.0.1"]
    }
}

./logstash/logstash-5.6.3/bin/logstash -f logstash.conf 执行,另一终端tcp输入数据

 nc 127.0.0.1 8888 < test1.log

输入:

nc_input
输出:

nc_logstash_output

syslog输入

  • syslog是一种标准的协议,分为客户端和服务器端,客户端是产生日志消息的一方,而服务器端负责接收客户端发送来的日志消息,并做出保存到特定的日志文件中或者其他方式的处理,rsyslog 是syslog 的升级版

服务器端

  • 使用的一个虚拟机,ip: 192.168.237.129
  • log收集服务器中logstash配置
input{
    syslog{
       port => "5514"
    }
}
output{
    stdout{
        codec => rubydebug{}
    }
    elasticsearch{
        hosts=>["127.0.0.1"]
    }
}
  • 启动
./logstash/logstash-5.6.3/bin/logstash -f logstash.conf
  • 查看启动端口情况,证明已经启动
ss -ntlp

ss-ntlp

客户端

  • 客户机配置, 这里是使用另外一个虚拟机, ip: 192.168.237.130
  • 配置syslog发送服务器地址
vim /etc/rsyslog.conf

加入:

*.* @@192.168.237.129:5514
  • 重启rsyslog,观察服务器logstash日志情况
/etc/init.d/rsyslog restart
  • 日志从logstash中输出
    syslog_success.

http_poller抓取

  • logstash可以作为数据采集客户端,去像指定地址请求数据

服务端

  • 本例子使用flask搭建简单的server来实现,因为flask确实够轻量够简单
from flask import Flask
app = Flask(__name__)
from flask import jsonify
@app.route("/hello")
def hello():
    return jsonify({"field": "Hello World!"})


@app.route("/bye")
def bye():
    return jsonify({"field": "bye!!!"})

if __name__ == "__main__":
    app.run(debug = True)
  • 启动, python app.py

  • 测试
    hello_bye_json

logstash客户端

  • 每一分钟请求一次,配置如下
input {
    http_poller {
        urls => {
            test1 => {
                     method => get
                     url => "http://127.0.0.1:5000/hello"
                     headers => {
                         Accept => "application/json"
                  }
            }
            test2 => {
                     method => get
                     url => "http://127.0.0.1:5000/bye"
                     headers => {
                         Accept => "application/json"
                  }
            }

        }
        request_timeout => 60
        schedule => {cron => "* * * * * UTC" }
        codec => "json"
        metadata_target => "http_poller_metadata"
    }
}

output{
    stdout{
        codec => rubydebug{}
    }
    elasticsearch{
        hosts=>["127.0.0.1"]
    }
}

请求顺序可以通过test_数字类似这样的hash顺序来作为hash的key
- 启动

./logstash/logstash-5.6.3/bin/logstash -f logstash.conf
  • 查看结果, 每隔一分钟会有如下输出
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值