• 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 {
        jdbc {    
        # 数据类型,类似定义当前查询的这个类型是什么,如有多个input,那么可通过这个type值进行区分
            type => "jdbc_es_search"
        # 数据库连接
            jdbc_connection_string => "jdbc:mysql://www.baidu.com:9205/esdb"
            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 * * * *"
        # 转码utf8
              codec => plain { charset => "UTF-8"}
        # 是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
            record_last_run => true
        # 只需要在 SQL 语句中 WHERE MY_ID > :last_sql_value 即可. 其中 :last_sql_value 取得就是该文件中的值    
            last_run_metadata_path => "/usr/share/logstash/myfile/station_time.txt"
        # 使用查询的字段值作为最后查询时间戳
            use_column_value => true
        # 使用的字段,一定要小写
            tracking_column => "c_time_update"
        # 数字或时间戳,一般都是时间戳
            tracking_column_type => "timestamp" 
        # 是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
            clean_run => false
        }
    }
     
    filter {
        date {
            match => ["create_at", "yyyy-MM-dd HH:mm:ss,SSS", "UNIX"]
            target => "@timestamp"
            locale => "cn"
        }
    }
     
    output {
        if [type] == "jdbc_es_search" {
            elasticsearch { 
                hosts => ["www.baidu.com:9200","www.baidu.com:9201"]
                index => "mses-%{+YYYY.MM.dd}" 
                # pk_id 为数据库表字段,指定为es的ID信息
                document_id => "%{pk_id}"
            }
            stdout {
                codec => json_lines
            }
        }
    }



    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
  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/a393060727/p/12573203.html
Copyright © 2020-2023  润新知