一、docker 部署 logstash
1、创建 Dockerfile
vim Dockerfile
FROM logstash:7.8.0
# 安装input插件
#RUN logstash-plugin install logstash-input-kafka
# 安装output插件
RUN logstash-plugin install logstash-output-influxdb
2、创建 image
docker build -t logstash:7.8.0 .
二、kafka + logstash + influxdb,将数据写入 influxdb
1、编写配置文件
vim logstash.yml
config:
reload:
automatic: true
interval: 3s
queue:
type: persisted
xpack:
management.enabled: false
monitoring.enabled: false
vim cat online-stat-to-influxdb.conf
input{
kafka {
bootstrap_servers => "10.0.0.1:9092"
codec => "json" # 将kafka的消息以json格式输入 这样的话 就可以直接在output和filter的部分使用"%{key}"来引用kafka消息中的对应字段的值
group_id => "test-online-stat" #消费者组id 为了记录消费的offset
consumer_threads => 1 # 消费者组中多少个消费者来消费这些topic中的消息 一般情况线程数对应topic的分区个数为最佳
topics => ["test-online-stat"] # 需要消费的topic 可以传入多个topic
auto_offset_reset => "latest" # 如果消费者组的offset丢失或者第一次加入 从什么位置开始消费
}}
output {
influxdb {
host => "10.0.0.2" # influx所在的ip,port默认8086.如果没有修改默认端口的话,可以不用配置port
port => 8086
db => "OnlineInfoCount" # 使用的数据库
user => "LoginInfoCount"
password => "12345678"
measurement => "t_minute_logical_count" # 将数据插入到哪个表中
retention_policy => "autogen" # 使用哪个保留规则
send_as_tags => ['vwType','vwId','areaId','serverId'] # 把哪些字段作为tag,datapoints中的字段必须大于此集合中的字段数
allow_time_override => true #是否允许覆盖默认的@timestamp字段 logstash在向influx插入消息时默认是将@timestamp作为time字段插入 ,所以上面的 date 过滤器中直接匹配赋值即可
flush_size => 1000 # 多少条消息提交到influx
idle_flush_time => 1 # 多久提交一次消息到influx
codec => json # 将消息以json格式输出
#coerce_values => {"cnt" => "long"} # 将某些字段的值类型强转
data_points => {
"vwType" => "%{vwType}"
"vwId" => "%{vwId}"
"areaId" => "%{areaId}"
"serverId" => "%{serverId}"
"cnt" => "%{cnt}"
"time" => "%{time}"
}
}
#stdout {codec => rubydebug} # 将消息打印出来
}
2、启动 container
docker run -d --name logstash -v /home/docker/logstash/config/online-stat-to-influxdb.conf:/usr/share/logstash/pipeline/online-stat-to-influxdb.conf -v /home/docker/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml --add-host=master:10.0.0.1 logstash:7.8.0
3、查看日志
docker logs -f --tail=100 logstash