docker搭建logstash读取宿主机文件

1 docker安装logstash

网上有教程说搭建logstash要从官网下载, 要不然会莫名其妙的不工作了, 我没有验证这个问题, 直接从官网下载了

docker run --rm -it --restart always --name logstash docker.elastic.co/logstash/logstash:7.6.0

直接通过运行的方式, 拉取logstash, 启动之后会噼里啪啦的报错, 根本接不住啊, 简单说, 就是logstash默认配置elasticsearch的问题

2 logstash启动配置

进入到logstash容器中去修改一下启动配置
获取logstash容器id

docker ps
docker exec -it 8s9g73kmkga /bin/bash

这里的8s9g73kmkga是容器id

2.1 修改配置文件

2.1.1 logstash.yml

注释掉第二行

http.host: "0.0.0.0"
# xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

2.1.2 logstash-sample.conf

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
    file{
        #path => ["/home/newtranx/doc-soa/ukey.agent/nohup.out"]
        path => ["/usr/share/logstash/listen_log/nohup.out"]
        start_position => "beginning"
    }
}

filter{
    mutate{
        remove_field => ["host","path","@timestamp","@version","log","ecs","tags","agent","input"]
        rename => {"message" => "logInfo"}
        gsub => ["logInfo","\r",""]
    }
}

output {
    stdout{
        codec => rubydebug{}
    }
    http{
        http_method => "post"
        url => "http://192.168.1....:8080/logs/saveLogInfo"
        mapping => {
            "log_info" => "%{logInfo}"
        }
        format => "form"
    }
}

这里input中配置的file路径是在容器中的路径, 在启动logstash时, 需要对这一路径进行关联, 否则docker中的容器是无法读取宿主机中的文件的, 这个问题确实花了很多时间解决

2.1.3 pipeline.yml

将path.config设置为自己配置的logstash-sample.conf

# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
#   https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html

- pipeline.id: main
  path.config: "/usr/share/logstash/config/logstash-sample.conf"
  pipeline.workers: 3

2.2 生成镜像

将刚才修改的内容进行保存, 就需要重新生成一个镜像, 不然每次启动时, 都是从最初始的镜像启动的, 这样上面的配置就丢了

docker commit -a='a_info' -m='m_info' bf4e103f6448 idea_logstash

这里bf4e103f6448是容器id, idea_logstash是给新镜像指定的名称

2.3 logstash启动

docker run --restart=always -it -v /home/newtranx/doc-soa/ukey.agent/nohup.out:/usr/share/logstash/listen_log/nohup.out idea_logstash

–restart=always 是用来配置开机随docker一起启动的
-v /home/newtranx/doc-soa/ukey.agent/nohup.out:/usr/share/logstash/listen_log/nohup.out 作用是将宿主机中的文件, 映射到logstash容器中, 二者的路径和文件名以冒号分割, 而logstash监听的文件, 就是容器中的文件, 宿主机中的文件和容器中的文件会响应式的关联, 也就是宿主机中文件发生改变, logstash容器中也可以检测到, 真正让logstash起到了监听的作用

至此, 问题完美解决 又是没有bug的一天 …下班…

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker中,要将文件从容器复制到宿主机,可以使用以下命令:docker cp \[容器名称或ID\]:\[容器内文件路径\] \[宿主机目标路径\]。例如,如果要将容器名为redis的容器中的配置文件复制到宿主机的/home/docker/redis/conf目录下,可以使用以下命令:docker cp redis:/data/appendonly.aof /home/docker/redis/conf。这样就可以将容器中的文件复制到宿主机中了。\[1\] #### 引用[.reference_title] - *1* [Docker运维系列 | 使用docker cp命令将容器中文件复制到宿主机,宿主机文件复制到容器](https://blog.csdn.net/qq_37781649/article/details/106017232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [如何从Docker中拷贝文件宿主机](https://blog.csdn.net/Rainbow_Dream88/article/details/123073872)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [docker从容器里面拷文件宿主机或从宿主机文件docker容器里面](https://blog.csdn.net/weixin_30302609/article/details/96488759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值