本文將聊聊如何使用 Docker 搭建 ELK (Elasticsearch、Logstash、Kibana)。
文章將分兩個部分對搭建進行介紹,用於開發測試以及一般分析需求的環境,以及彈性擴容后可以用於一般生產的環境。
因為借助於方便的 Docker,完整操作時間不超過 15 分鍾,如果你對 Docker 還不熟悉,可以瀏覽之前的文章。
寫在前面
為了方便搭建,我們使用 https://github.com/deviantony/docker-elk 這個開源項目,這個項目維護了 ELK 技術棧最近的三個版本,也就是 7.x、6.x、5.x ,本文將使用最新版本。
用於開發測試的基礎環境使用一台1c2g的虛擬機即可,當然機器資源越多我們的服務運行效率也會越高、相同時間內數據處理能力也就越大。而用於一般生產環境建議根據自己具體情況給予更多資源。
先聊聊測試環境搭建。
測試開發環境
使用 Git Clone 命令將項目下載到所需要的位置。
git clone https://github.com/deviantony/docker-elk.git /app/docker-elk
Cloning into '/app/docker-elk'...
remote: Enumerating objects: 1729, done.
remote: Total 1729 (delta 0), reused 0 (delta 0), pack-reused 1729
Receiving objects: 100% (1729/1729), 410.25 KiB | 11.00 KiB/s, done.
Resolving deltas: 100% (705/705), done.
在啟動項目前,我們先了解下基礎的目錄結構。
├── docker-compose.yml
├── docker-stack.yml
├── elasticsearch
│ ├── config
│ │ └── elasticsearch.yml
│ └── Dockerfile
├── extensions
│ ├── apm-server
│ ├── app-search
│ ├── curator
│ ├── logspout
├── kibana
│ ├── config
│ │ └── kibana.yml
│ └── Dockerfile
├── LICENSE
├── logstash
│ ├── config
│ │ └── logstash.yml
│ ├── Dockerfile
│ └── pipeline
│ └── logstash.conf
└── README.md
可以清楚看到,項目主要使用根目錄的 docker-compose.yml 作為啟動配置,並在首次啟動時,構建相關服務的容器鏡像。
了解了項目工作方式后,可以使用 docker-compose up
來啟動項目。
docker-compose up
Creating network "docker-elk_elk" with driver "bridge"
Creating volume "docker-elk_elasticsearch" with default driver
Building elasticsearch
Step 1/2 : ARG ELK_VERSION
Step 2/2 : FROM docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
7.6.2: Pulling from elasticsearch/elasticsearch
c808caf183b6: Downloading [==> ] 3.736MB/85.21MB
d6caf8e15a64: Downloading [===================> ] 13.69MB/34.71MB
b0ba5f324e82: Download complete
d7e8c1e99b9a: Downloading [=> ] 11.71MB/321.6MB
85c4d6c81438: Waiting
3119218fac98: Waiting
914accf214bb: Waiting
...
Creating docker-elk_elasticsearch_1 ... done
Creating docker-elk_logstash_1 ... done
Creating docker-elk_kibana_1 ... done
Attaching to docker-elk_elasticsearch_1, docker-elk_logstash_1, docker-elk_kibana_1
logstash_1 | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
elasticsearch_1 | Created elasticsearch keystore in /usr/share/elasticsearch/config
logstash_1 | WARNING: An illegal reflective access operation has occurred
logstash_1 | WARNING: Illegal reflective access by com.headius.backport9.modules.Modules (file:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.9.0.jar) to method sun.nio.ch.NativeThread.signal(long)
logstash_1 | WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
logstash_1 | WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
logstash_1 | WARNING: All illegal access operations will be denied in a future release
elasticsearch_1 | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
elasticsearch_1 | {"type": "server", "timestamp": "2020-05-03T03:47:40,483Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "0d05db8360df", "message": "using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda2)]], net usable_space [83.6gb], net total_space [97.9gb], types [ext4]" }
elasticsearch_1 | {"type": "server", "timestamp": "2020-05-03T03:47:40,493Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "0d05db8360df", "message": "heap size [247.5mb], compressed ordinary object pointers [true]" }
kibana_1 | {"type":"log","@timestamp":"2020-05-03T03:47:40Z","tags":["info","plugins-service"],"pid":6,"message":"Plugin \"case\" is disabled."}
啟動過程中的日志會類似上面這樣,因為首次啟動需要從官網鏡像倉庫中下載相關鏡像,所以會慢一些。當你看到終端輸出類似上面的日志時,說明服務已經啟動完畢。
為了驗證,我們可以使用瀏覽器或者 curl 等工具訪問機器地址加端口號 9200,並使用默認用戶名 elastic
和默認密碼 changeme
來訪問 Elasticsearch HTTP 端口,如果一切正常,你將看到類似下面的結果。
{
"name" : "0d05db8360df",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "Mq2EZX59TqW7ysGx7Y-jIw",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
現在不着急訪問 Kibana ,我們繼續進行配置調整。
重置內建用戶密碼
使用 docker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch
命令對服務默認的賬戶進行默認密碼重置。
docker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch
Changed password for user apm_system
PASSWORD apm_system = YkELBJGOT6AxqsPqsi7I
Changed password for user kibana
PASSWORD kibana = FxRwjm5KRYvHhGEnYTM9
Changed password for user logstash_system
PASSWORD logstash_system = A4f5VOfjVWSdi0KAZWGu
Changed password for user beats_system
PASSWORD beats_system = QnW8xxhnn7LMlA7vuI7B
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = OvjEGR13wjkOkIbWqaEM
Changed password for user elastic
PASSWORD elastic = PGevNMuv7PhVnaYg7vJw
將密碼妥善保存后,我們需要將 docker-compose.yml
配置文件中的 elasticsearch 服務的 ELASTIC_PASSWORD
去掉,這樣可以確保服務啟動只使用我們剛剛重置后的密碼(keystore)。以及需要對 kibana 、 logstash 配置文件中的信息進行替換,將文件中的 elastic 用戶的密碼進行更新,相關文件我們在開篇的目錄結構中有提過,暫時先修改下面三個文件就可以了:
- kibana/config/kibana.yml
- logstash/config/logstash.yml
- logstash/pipeline/logstash.conf
需要注意的是, logstash pipeline 需要一個高權限賬號,當前測試開發過程中,可以使用上面重置后的 elastic 賬號和密碼,如果是生產使用可以參考官方文檔 Configuring Security in Logstash 進行操作,分配一個新的專用賬號。
在配置修改完畢后,我們執行 docker-compose restart
重啟相關服務。
docker-compose restart
Restarting docker-elk_kibana_1 ... done
Restarting docker-elk_logstash_1 ... done
Restarting docker-elk_elasticsearch_1 ... done
如果日志中沒有出現任何 401 或者訪問拒絕的內容,說明服務一切正常。
使用 Kibana 控制台
啟動之后,我們使用瀏覽器訪問服務器IP+端口5601,打開 kibana 控制台。
使用elastic 賬號和密碼登錄后,就能夠看到 Kibana 的界面了,如果第一次使用,會看到歡迎界面。
在登陸之后,第一次使用,可以考慮導入示例數據,來幫助了解 Kibana 的基礎功能。
接下來就是自由探索的過程了,: )
關閉付費組件
打開設置界面,選擇 Elasticsearch 模塊中的 License Management ,可以看到默認軟件會啟動為期一個月的高級功能試用。
在 官方訂閱 頁面,我們可以看到官方支持的訂閱類型,一般來說,如果沒有特殊需求,使用基礎版本就好。
如果你想要了解軟件當前運行狀態,除了登陸機器,查看宿主機和容器狀態外,在監控界面,我們也可以方便快捷的看到單節點中各個服務的運行狀態和資源占用。
選擇“Revert to Basic license”,選擇回退到基礎版本,可以看到整個界面都簡潔了不少,至此如果不付費的話,就可以安心合法的使用軟件了。
當然,你也可以在 elasticsearch.yml 配置文件中的 xpack.license.self_generated.type
修改為 basic
來禁用 X-Pack 相關功能。
xpack.license.self_generated.type: basic
對接各種軟件/系統進行日志收集,以及定制你的可視化界面或者 API 我們后面有機會再聊,接下來繼續聊聊,如何進一步搭建配置 ELK
本人親自實驗,很好用。原文出自:https://soulteary.com/2020/05/04/use-docker-to-build-elk-environment.html