ELK docker 安装logstash

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

相关推荐