docker 部署logstash

917 阅读2分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

今天主要想介绍一下logstash 这个工具,真的很不错,最近在工作中使用到了,对于日志传输收集等都很友好,可以很方便的同步数据到elasticsearch 或者 kafka等工具均可以,今天主要介绍同步文件数据到elasticsearch中

docker pull logstash:6.4.0

km_log_pattern 文件:

STIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}:?%{SECOND},?%{MSECONDS}

logstash.conf 配置参数:

读取 文件数据 并写入 elasticsearch

input {

  file {

    path => ["/home/work/testVolume/test_map_log/*.log","/home/work/testVolume/test_map_log/*.log"]

    type => "test_map_new"

    start_position => "beginning"

  }

}

\


filter {

  grok {

    patterns_dir => ["/config-dir/cmap_log_pattern"]

    match => {

      "message" => [

          "\[%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second},%{MSECONDS:mill_seconds}\]\[user_id:%{GREEDYDATA:user_id},mobile:%{GREEDYDATA:user_mobile},status:%{GREEDYDATA:user_status},real_name:%{GREEDYDATA:real_name},email:%{GREEDYDATA:user_email},city:%{GREEDYDATA:user_city},permission_info:%{GREEDYDATA:permission_info},b_stree_permission:%{GREEDYDATA:b_stree_permission},together_permission:%{GREEDYDATA:together_permission},is_admin:%{GREEDYDATA:is_admin}\]\[URL:%{GREEDYDATA:uri}\]\[params:%{GREEDYDATA:params_json_content}\]",

          "\[%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second},%{MSECONDS:mill_seconds}\]\[user_id:%{GREEDYDATA:user_id},mobile:%{GREEDYDATA:mobile},platformCompany:%{GREEDYDATA:platformCompany},real_name:%{GREEDYDATA:real_name},email:%{GREEDYDATA:email},city:%{GREEDYDATA:city},role:%{GREEDYDATA:role},platformCompany:%{GREEDYDATA:platformCompany}\]\[URL:%{GREEDYDATA:uri}\]\[params:%{GREEDYDATA:params_json_content}\]",

          "\[%{YEAR:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second},%{MSECONDS:mill_seconds}\]\[user_id:%{GREEDYDATA:user_id}\]\[URL:%{GREEDYDATA:uri}\]\[params:%{GREEDYDATA:params_json_content}\]"

      ]

    }

  }

  json {

    source => "params_json_content"

    target => "params_json"

    remove_field => ["paramsjson"]

  }

}

\


output {

  elasticsearch {

    hosts => ["127.0.0.1:9200"]

    index => "test_log"

    user => "test"

    password => "xxxxx"

  }

  stdout { codec => line }

}

读取kafka数据写入elasticsearch

input {
    kafka {
        bootstrap_servers => ["xxx.xxx.xxx.xxx:9092"]
        auto_offset_reset => "latest"
        consumer_threads => 5
        decorate_events => true
        group_id => "xxx"
        topics => ["xxxxxxxxxx"]
        type => "xxxxx"
    }
}

output {
    stdout {}
    elasticsearch {
          hosts => ["xxx.xxx.xxx.xxx:9200"]
          index => "kafka-xxx-%{+YYYY.MM.dd}"
    }
}

启动docker命令:

docker run -d --name logstash_test  --log-opt max-size=10m --log-opt max-file=3  -v /config-dir:/config-dir -v /home/work/logstash_test/logstash:/home/work/logstash_test/logstash -v logstash -f /config-dir/logstash.conf

以上是通过读取文件然后写入elasticsearch 的方式去进行部署还有一种方式是通过部署logstash服务,其他服务进行服务调用去写入

相关logstash.conf 配置:

input {

  tcp {

      host => "0.0.0.0"

      port => "5044"

      codec => json

  }

}

filter{

  if [type] == "logstash" {

        ruby { 

            code => "event.set('timestamp', event.timestamp.time.localtime.strftime('%Y-%m-%d %H:%M:%S'))" 

        }

    }

}

output {

  elasticsearch { 

             hosts => ["xx.xx.xx.xx:9200","xx.xx.xx.xx:9200"#可以配置多个机器 一般为集群

             user => "xxxxxx" 

             password => "xxxxxx" 

             index => "xxxxxx" 

             codec => "json"

  }

  

  stdout { codec => json }

}

启动命令:

docker run -it -d -p 5044:5044--name logstash --net somenetwork -v /docker/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /docker/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:6.4.0

通过上面就可以搭建一个logstash的服务了,然后其他应用就可以直接调用 xx.xx.xx.xx:5044 传输日志文件进入elasticsearch 了