在我的AWS EC2 linux服務器上,我正在運行一個ELK堆疊,其中logstash正在轉換postgress資料庫并匯入Elasticsearch。這個設定目前在我的開發環境中使用。我們已經建立了一個階段性的環境,所以我們也需要一個單獨的ELK堆疊,因為我們不想混合兩個獨立的資料庫(開發和階段)的資料。
我在ELK方面的經驗相當少,我檢查了一些選項,但沒有找到這個問題的任何解決方案。
我所嘗試的是創建另一個docker-compose檔案,使用不同的容器名稱和埠。當我運行docker-compose.elastic.dev.yml時,它通常會創建第一個ELK堆疊。然后我運行docker-compose.elastic.stage.yml,但它開始重新創建現有的ELK容器。我試著玩了一下docker-compose的設定,但到目前為止還沒有成功。有什么建議嗎?
僅供參考,dev中不包括kibana,因為我們在那里不需要它。
docker-compose.elastic.stage.yml
版本: '3.7
服務。
elasticsearch-stage:
container_name: elasticsearch-stage
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
埠。
- 9400:9200
環境。
- http.cors.enabled=true
- http.cors.allow-origin=*
- http.cors.allow-methods=OPTIONS,HEAD,GET,POST,PUT,DELETE
- http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization
- transport.host=127.0.0.1
- cluster.name=docker-cluster
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
卷。
- elasticsearch_data_stage:/usr/share/elasticsearch/data
網路。
- api_network
kibana-stage:
容器名稱: kibana-stage
image: docker.elastic.co/kibana/kibana:7.10.2
埠。
- 5601:5601
網路。
- api_network
depends_on:
- elasticsearch-stage
logstash-stage。
container_name: logstash-stage
埠。
- 5045:5045
構建。
dockerfile: Dockerfile.logstash
背景關系: .
環境。
logstash_jdbc_url: "jdbc:postgresql://serverip:15433/name"
logstash_jdbc_username: "name"
LOGSTASH_JDBC_PASSWORD: "密碼"
logstash_elasticsearch_host: "http://elasticsearch-stage:9200"
卷。
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
- ./offers_template.json:/usr/share/logstash/templates/offers_template.json
- ./offers_query.sql:/usr/share/logstash/queries/offers_query.sql
日志。
驅動程式。"json-file"
選項。
max-size。"200m"
max-file: "5"
網路。
- api_network
depends_on:
- elasticsearch-stage
- kibana-stage
卷。
elasticsearch_data_stage:
網路。
api_network:
name: name_api_network_stage
docker-compose.elastic.dev.yml
version: '3.7'.
服務。
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
埠。
- 9200:9200
環境。
- http.cors.enabled=true
- http.cors.allow-origin=*
- http.cors.allow-methods=OPTIONS,HEAD,GET,POST,PUT,DELETE
- http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization
- transport.host=127.0.0.1
- cluster.name=docker-cluster
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
卷。
- elasticsearch_data:/usr/share/elasticsearch/data
網路。
- api_network
logstash。
build:
dockerfile: Dockerfile.logstash
背景關系: .
環境。
logstash_jdbc_url: "jdbc:postgresql://serverip:15432/username"
logstash_jdbc_username: "用戶名"
LOGSTASH_JDBC_PASSWORD: "密碼"
logstash_elasticsearch_host: "http://elasticsearch:9200"
卷。
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
- ./offers_template.json:/usr/share/logstash/templates/offers_template.json
- ./offers_query.sql:/usr/share/logstash/queries/offers_query.sql
日志。
驅動程式。"json-file"
選項。
max-size。"200m"
max-file: "5"
網路。
- api_network
depends_on:
- elasticsearch
卷。
elasticsearch_data:
網路。
api_network:
name: name_api_network
我也找到了這篇文章,似乎是類似/相同的問題,遺憾的是話題被關閉,沒有確認解決方案。
logstash.conf
input {
jdbc {
jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/postgresql.jar"
jdbc_driver_class => "org.postgresql.Driver"
jdbc_connection_string => "${LOGSTASH_JDBC_URL}"
jdbc_user => "${LOGSTASH_JDBC_USERNAME}"
jdbc_password => "${LOGSTASH_JDBC_PASSWORD}"
小寫字母_列名 => false
schedule => "* * * * "
statement_filepath => "/usr/share/logstash/queries/offers_query.sql"
}
}
過濾器 {
json {
source => "name"
target => "name"
}
json {
source => "description"
target => "描述"
}
...
...
}
輸出 {
elasticsearch {
hosts => ["${LOGSTASH_ELASTICSEARCH_HOST}")
index => "offer"
document_id => "%{id}"
manage_template => true
template_name => "offer"
template => "/usr/share/logstash/templates/offers_template.json"
template_overwrite => true
}
stdout { codec => json_lines }
}
UpDATE:
我在這里發現,如果不運行默認的logstash配置,我需要設定XPACK_MONITORING_ENABLED: "false"為logstash environment,logstash無法連接到elasticsearch的錯誤已經消失了,但是logstash仍然沒有像正常情況下那樣完成處理DB資料的作業。現在的情況是,在logstash日志中,每隔幾分鐘就會有從offers_query.sql加載的普通查詢文本。當我輸入elasticsearch_server_ip:9400時,我得到這樣的輸出(所以它應該在運行):
{
"name" : "30ac276f0846",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "14mxQTP7S32o-rIrjYSsXw",
"版本" : {
"數字" : "7.10.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "747e1cc71def0772538a59143c1f785afa92b9" 。
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"標語":"你知道的,用于搜索"
uj5u.com熱心網友回復:
據我所知,你在檔案中仍然有相同的服務名稱,這使得docker-compose up -d感到困惑。
你的問題是在docker-compose檔案中對服務的命名。
services:
elasticsearch
logstash
這在dev和staging compose上是一樣的,由于你沒有運行swarm,你將需要如下。 將docker-composes分離到不同的檔案夾中,這樣docker-compose就可以創建不同的容器名稱。
而且是的,你不能讓主機上的相同埠被轉發
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
埠。
- 9200:9200
一個彈性搜索應該有9400:9200或類似的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/315415.html
標籤:
下一篇:RequestError(400,'illegal_argument_exception','[f756ea2593ee][172.18.0.4:9300][indice
