Logstash很强大,之前使用过input中的beat插件,现改成用http插件,在这里又跳坑了,留个纪念。
- 配置http
input {
http {
codec => plain {
charset=>"GB2312"
}
}
}
特别注意,在python代码中 data数据 通过encode(‘utf8’)后,传入logstash,即使在解码回,还是回不到原来的。所以这里用了GB2312。
启动logstash,开启8080端口
python中代码调用
post_url = 'http://192.168.220.123:8080/'
#以上地址为logstash的访问地址
postData ={'test': '2017-08-15 18:25:22|20.63.150.241|上海|23124@etest'}
data = urllib.parse.urlencode(postData)
data = data.encode('utf8')
req = urllib.request.Request(post_url, data)
response = urllib.request.urlopen(req)
page = response.read()
status = response.getcode()
result = post_url + '|' + str(status) + '\n'
print (result)
- 在通过http接口吐出数据
http {
http_method => "post"
url => "http://192.168.220.123:6070/report/playstatus?log="
#接数据的地址
format => "message"
headers => ["X-My-Header", "%{host}"]
message => "%{message}"
}
特别注意,logstash的output的http怎么带参数的问题,在之前尝试时将参数直接在写log=后面,当参数中存在空格或其他特殊字符时 到接口应用中就会到500错误。
而http流是将body转成event,可以将参数信息放在body中,接口应用去读body的内容即可。
关于其他Logstash配置可以参考logstash配置文件常用参数