多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
Logstash区分两种不同的配置文件:[应用配置和管道配置](https://www.elastic.co/guide/en/logstash/current/config-setting-files.html)。 ### 管道配置 你需要将管道配置文件放在Logstash可以找到的地方,这是很有必要的。默认情况下,容器中Logstash的管道配置可以在`/usr/share/logstash/pipeline`中找到。 在这个示例中,我们使用绑定挂载卷来提供配置通过`docker run`命令: ```shell docker run --rm -it -v ~/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:6.5.1 ``` 所有主机中`~/pipeline/`目录下的文件都会被解析作为Logstash的管道配置文件。 如果你没有给Logstash提供配置,它将会以最小化的配置运行。从[Beats input plugin](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html)并将接收到的信息输出至`stdout`。这种情况下,其启动日志如下: ```shell Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties. [2016-10-26T05:11:34,992][INFO ][logstash.inputs.beats ] Beats inputs: Starting input listener {:address=>"0.0.0.0:5044"} [2016-10-26T05:11:35,068][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500} [2016-10-26T05:11:35,078][INFO ][org.logstash.beats.Server] Starting server on port: 5044 [2016-10-26T05:11:35,078][INFO ][logstash.pipeline ] Pipeline main started [2016-10-26T05:11:35,105][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600} ``` 这是镜像的默认配置,定义在`/usr/share/logstash/pipeline/logstash.conf`文件中。如果你看到的是这种情况, 确保你的管道配置可以被正确的读取,并且替换了`logstash.conf`或整个管道配置目录。(我想这段的意思是如果你在测试但时候出现上述信息说明Logstash使用的是默认的管道配置,如果这和你的预期不符,请检查配置文件是不是可以被正确读取,或者有没有替换配置文件。附原文:If this is the behaviour that you are observing, ensure that your pipeline configuration is being picked up correctly, and that you are replacing either `logstash.conf` or the entire `pipeline` directory.) ### Settings 镜像给配置设置提供了一些方法,传统的方法是提供一个可以自定义的`logstash.yml`文件,但是也可以使用环境变量来定义设置。 ### Bind-mounted settings files 设置文件也可以通过绑定挂载来提供。Logstash希望这些文件的路径是`/usr/share/logstash/config/`。 可以通过提供一个目录来包含所有需要的文件: ```shell docker run --rm -it -v ~/settings/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:6.5.1 ``` 或者挂载单个文件: ```shell docker run --rm -it -v ~/settings/logstash.yml:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:6.5.1 ``` > <font color=#DC143C size=4>NOTE</font>:绑定挂载的配置文件在容器中的权限等同于文件在宿主机上的权限。确定文件的权限是可以被读取的,并且理想情况下对于容器Logstash用户(UID1000)不可写。原文: Be sure to set permissions such that the files will be readable and, ideally, not writeable by the container’s `logstash` user (UID 1000). ### Custom Images 绑定挂载自然不是你唯一的选择。如果你不想改变基础设施,你可使用`Dockerfile`自定义一款镜像,像这样: ```shell FROM docker.elastic.co/logstash/logstash:6.5.1 RUN rm -f /usr/share/logstash/pipeline/logstash.conf ADD pipeline/ /usr/share/logstash/pipeline/ ADD config/ /usr/share/logstash/config/ ``` 确保替换或删除了镜像中的`logstash.yml`文件,如此即不必保留原始镜像中的示例配置。 ### Environment variable configuration 容器中,Logstash应用设定可以通过环境变量进行配置。当容器启动,一个辅助进程检查环境中可以映射到Logstash设置中的变量。在环境中找到的变量会在容器启动之后合并到`logstash.yml`中。 为了与容器编排系统兼容,所有的环境变量使用大写字母,单词使用下划线分割,下面是一些转换示例: ### **Table 1. Example Docker Environment Variables** | **Environment Variable** | **Logstash Setting** | | -------------------------- | -------------------------- | | `PIPELINE_WORKERS` | `pipeline.workers` | | `LOG_LEVEL` | `log.level` | | `XPACK_MONITORING_ENABLED` | `xpack.monitoring.enabled` | 一般情况下, [settings documentation](https://www.elastic.co/guide/en/logstash/current/logstash-settings-file.html)中列出的所有设置项都可以使用此种方法进行配置。 > <font color=#DC143C size=4>NOTE</font>:通过环境变量定义应用设置会导致`logstash.yml`有些许变动,这在`logstash.yml`使用绑定挂载的时候是不可接受的。因此我们不建议同时使用绑定挂载和环境变量,最好的选择是只使用一种方式进行配置。 ### Docker defaults 当使用Docker镜像的时候,下面的应用设置有不同的默认值: | `http.host` | `0.0.0.0` | | ------------------------------------ | --------------------------- | | `xpack.monitoring.elasticsearch.url` | `http://elasticsearch:9200` | > <font color=#DC143C size=4>NOTE</font>:在`-oss`镜像中,`xpack.monitoring.elasticsearch.url` 没有定义。 这些设置在默认的`logstash.yml`中进行了定义。你可以使用自定义[`logstash.yml`](https://www.elastic.co/guide/en/logstash/current/docker-config.html#docker-bind-mount-settings)或[环境变量](https://www.elastic.co/guide/en/logstash/current/docker-config.html#docker-env-config)来覆盖这些设置。 > <font color=#000080 size=4>IMPORTANT</font>:如果使用了自定义的`logstash.yml`,确保你在想使用上面的配置的时候在文件中添加了对应的配置。他们会被新文件"masked"。原文:If replacing `logstash.yml` with a custom version, be sure to copy the above defaults to the custom file if you want to retain them. If not, they will be "masked" by the new file. ### Logging Configuration Docker中Logstash的日志默认会输出到stdout。要改变这种行为,使用上面的任一方法替换下面的文件:`/usr/share/logstash/config/log4j2.properties`。