小爷有点狂 2020-03-26
logstash 是什么。
个人理解。就3个东西 输入input,输出output,过滤转换filter。
其中input可有有多种类型来源:beat网络传入,jdbc数据库查询来源,file来源文件。
什么时候用什么场景用。
因为logstash内存、cpu消耗非常大。所以每个机器上安装它去采集信息不合理。而可以结合其他的数据源轻便的,比如mq队列kafka、文件采集filebeat。
beat:通过端口传入信息。很多个多点都往同一个logstash中传输。比如分布式日志采集的时候,用filebeat。
jdbc:我们需要从数据库中定时查询出某些数据,放入其他的存储库中,比如文件,nosql库,es库等。。一般用于搜索引擎数据同步
file:采集本机文件入库。。。比如某些订单,某些日志。。。
Logstash 下载安装。
运行之前,需要准备好挂载目录中的内容上传到宿主机中:
配置文件logstash.yml
# 配置文件都在目录 conf.d/*.conf中,意味着,所有.conf结尾的都是配置文件,都会执行 path.config: /usr/share/logstash/conf.d/*.conf# 指定日志目录 path.logs: /usr/share/logs
conf.d/*.conf 放了些什么东西。。我这里放两个文件,1是 filebeat.conf,采集文件的文件规则
input { beats { port => 5044 codec => "json" } } filter { date { match => [ "@timestamp" , "yyyy/MM/dd:HH:mm:ss Z" ] } mutate { remove_field => ["host","ecs","json","agent","input","log","@version","tags"] } } output { elasticsearch { hosts => ["www.baidu.com:9200","www.baidu.com:9201"] user => "elastic" password => "elastic" index => "%{[fields][systemid]}-%{+YYYY.MM.dd}" } }
2是 syncmysql.conf,数据表同步到es的文件规则
input { stdin { } jdbc { jdbc_connection_string => "jdbc:mysql://www.baidu.com:9205/esdb?serverTimezone=GMT%2B8" jdbc_user => "root" jdbc_password => "123456" jdbc_driver_library => "/usr/share/logstash/myfile/mysql-connector-java-6.0.6.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "1000" statement => "SELECT * FROM t_b_estate_search where c_time_update> :sql_last_value order by c_time_update asc" schedule => "*/1 * * * *" codec => plain { charset => "UTF-8"} record_last_run => true last_run_metadata_path => "/usr/share/logstash/myfile/station_time.txt" use_column_value => true tracking_column => "c_time_update" tracking_column_type => "timestamp" clean_run => false } } filter { ruby { code => "event.timestamp.time.localtime" } date { match => [ "@timestamp" , "yyyy/MM/dd:HH:mm:ss Z" ] } } output { stdout { codec => json_lines } elasticsearch { hosts => ["www.baidu.com:9200","www.baidu.com:9201"] index => "mses-%{+YYYY.MM.dd}" } }
myfile目录,有mysql驱动,一个空白的文件,用于记录数据库采集同步时间
安装运行命令:
// 意思 运行这个(logstash:7.1.1,有就执行,没有就下载后执行),如果异常了,自动重启(随机器启动过后重启),限制运行内存在1000m 后台运行-it -d ,// 对外映射顿口5044,9600,容器名字叫logstash,挂载几个目录,--privileged=true 让容器有特权写入同步到宿主机 docker run --restart=always -m 1000M -it -d -p 5044:5044 -p 9600:9600 --name logstash -v /home/soft/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /home/soft/logstash/conf.d/:/usr/share/logstash/conf.d/ -v /home/soft/logstash/myfile/:/usr/share/logstash/myfile/ -v /home/soft/logstash/logs/:/usr/share/logs/ --privileged=true logstash:7.1.1