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`。
- Emmm
- Logstash簡介
- 開始使用Logstash
- 安裝Logstash
- 儲存你的第一個事件
- 通過Logstash解析日志
- 多個輸入和輸出插件的混合使用
- Logstash是如何工作的
- 執行模型Execution Model
- 設置并運行Logstash
- Logstash目錄布局
- Logstash配置文件
- logstash.yml
- Secrets keystore for secure settings
- 從命令行運行Logstash
- 以服務的方式運行Logstash
- 在Docker中運行Logstash
- 配置容器版Logstash
- Logging
- 關閉Logstash
- 安裝X-Pack
- 設置X-Pack
- 升級Logstash
- 使用包管理升級
- 直接下載進行升級
- 升級至6.0
- Upgrading with the Persistent Queue Enabled
- 配置Logstash
- 管道配置文件的結構
- 訪問配置中的事件數據和字段
- 在配置中使用環境變量
- Logstash配置示例
- 多管道
- 管道間通信(beta)
- 重載配置文件
- 管理多行事件
- Glob Pattern Support
- Converting Ingest Node Pipelines
- Logstash間通信
- 配置集中式管道管理
- X-Pack Monitoring
- X-Pack Security
- X-Pack Settings
- Field References Deep Dive(深入字段引用)
- 管理Logstash
- 集中式管道管理
- 使用Logstash模塊
- 使用Elastic Cloud
- Logstash ArcSight模塊