首頁>技術>

這裡紀錄自學過程中ELK環境的搭建,方便自己以後參考,也給大家作參考。

部署架構

應用程式日誌–>kafka–>logstash–>es–>kibana。

安裝

Elasticsearch 需要的 Java 最低版本為 Java 8。所以第一步需要確保安裝了正確版本的jdk。

我們假定elk的目錄為/data/soft/elk。通過下面的命令下載es

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.tar.gz

然後解壓縮

tar -xvf elasticsearch-5.4.0.tar.gz

然後使用下面的命令啟動es。

./bin/elasticsearch.sh

啟動正常的話,可以看到下面的日誌。

然後我們通過http://yourip:9200可以看到下面的資料

如果想後臺執行ES,加上-d引數即可。./bin/elasticsearch -d。

安裝Head外掛

安裝head外掛,需要先安裝nodejs。

使用node -v確認已安裝nodejs。如果沒有安裝執行yum install nodejs來安裝。

可能遇到的問題:沒有可用軟體包 nodejs。

解決:執行yum install epel-release;然後再安裝nodejs。

使用淘寶的npm映象cnpm

使用npm安裝依賴有時會比較慢,我們可以使用淘寶的cnpm映象。

執行下面的命令來安裝:

npm install -g cnpm --registry=https://registry.npm.taobao.org

安裝後,原來使用npm,現在使用cnpm即可。

安裝grunt

cnpm install -g grunt-cli

確認一下版本,grunt --version。

修改HEAD監聽的地址

預設HEAD監聽 localhost,修改Gruntfile.js,新增hostname

connect: {    server: {        options: {            hostname: '*',            port: 9100,            base: '.',            keepalive: true        }    }}

既然是跨源訪問ES,那麼就要在HEAD裡面指定ES伺服器了,修改_site/app.js

init: function(parent) {    this._super();    this.prefs = services.Preferences.instance();    this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.193.100:9200";    if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {        // XHR request fails if the URL is not ending with a "/"        this.base_uri += "/";    }...

進入HEAD目錄,安裝HEAD依賴包,執行cnpm install。

啟動head外掛

使用grunt server來啟動head外掛,看到下面的內容就說明啟動成功了。

head外掛使用的埠是9100,記得在防火牆中新增進去。

然後我們瀏覽器訪問http://yourip:9100/

ps:也可以通過npm run start 來啟動,npm run start &後臺啟動。

停止head外掛

檢視 9100 (head 埠)埠:lsof -i:9100

殺死程序:kill -9 pid

es叢集狀態的說明

green:每個索引的primary shard和replica shard都是active狀態的。

yellow:每個索引的primary shard都是active狀態的,但是部分replica shard不是active狀態,處於不可用的狀態。

red:不是所有索引的primary shard都是active狀態的,部分索引有資料丟失了。

安裝kafka

這裡使用的目前最新的版本,從http://kafka.apache.org/downloads下載。

解壓縮,得到目錄kafka_2.11-2.3.0。

修改配置檔案/config/server.properties

listeners=PLAINTEXT://192.168.193.100:9092

啟動kafka:

./kafka-server-start.sh ../config/server.properties

後臺啟動kafka:

./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 &
安裝logstash

這裡的logstash版本是5.4.0與es一致,從https://www.elastic.co/downloads/logstash下載相應的版本。

然後解壓縮,進入config目錄。

新建一個配置檔案,名字隨意,這裡命名為test.conf。

input {  kafka {    bootstrap_servers => "192.168.193.100:9092"    topics => ["app-log"]    group_id => "test-consumer-group"    codec => "json"    consumer_threads => 1    decorate_events => true  }}output {  elasticsearch {    hosts => ["127.0.0.1:9200"]    index => "test"    workers => 1  }}

啟動logstash

./bin/logstash -f config/test.conf
使用程式寫入100條測試資料到Kafka

注意topic要與logstash中配置的一致。

這裡使用logback的appender來將日誌寫入kafka,logstash從kafka接受,然後傳送給es。

使用的github上的一個logback-kafka-appender依賴。

安裝Kibana

從https://www.elastic.co/downloads/kibana下載kibana,kibana要與es的版本一致,所以這裡也下載5.4.0版本。

然後解壓縮

最後使用./bin/kibana啟動。kibana使用的埠號為5601,記得加入防火牆。

瀏覽器訪問http://192.168.193.100:5601

在上面的logstash配置中,我們指定了es中的索引為test。所以在Kibana的Index name or pattern中輸入test。然後點下面的Create。

然後再左側可以看到剛剛配置的索引

點左側的Discover選單,然後就將右側的時間選擇為Today,可以看到日誌了

kibana常用搜索

全文搜尋

在搜尋欄輸入測試,返回所有欄位中包含”測試”的文件(document)。

根據欄位搜尋

根據kibana左側顯示的field搜尋。field:value

精確搜尋:field:”value”

參考:https://blog.csdn.net/zhengchaooo/article/details/79500130

問題

可能會遇到下面的問題:

1.max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解決:修改切換到root使用者修改配置limits.conf 新增下面兩行

命令:vi /etc/security/limits.conf

*        hard    nofile           65536*        soft    nofile           65536

2.max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決:切換到root使用者修改配置sysctl.conf

vi /etc/sysctl.conf

新增下面配置:

vm.max_map_count=655360

並執行命令:

sysctl -p

3.es啟動成功,虛擬機器中可以訪問9200,但windows中無法訪問。

首先確保防火牆關閉或添加了9200埠。

firewall-cmd --zone=public  --permanent --add-port=9200/tcp

另外, 修改es配置檔案elasticsearch.yml,修改network.host和http.port

network.host: 0.0.0.0http.port: 9200

然後重啟es。

4.安裝head外掛遇到的問題

4.1 RunScriptError: post install error, please remove node_modules before retry!

重新執行安裝命令,遇到npm WARN [email protected] license should be a valid SPDX license expression問題。

解決:參考/file/2020/03/03/20200303113228_73967.jpg.html _Loading "Gruntfile.js" tasks...ERROR錯誤

解決:參考https://blog.csdn.net/wang_zhenwei/article/details/78389253

4.3 head外掛啟動成功後訪問9100,沒有列出ES的節點,F12開啟Console,發現有跨域問題

解決:修改/ES_HOME/config/elasticsearch.yml,增加下面的配置

http.cors.enabled: truehttp.cors.allow-origin: "*"

然後重啟ES和head即可。

參考:https://blog.csdn.net/u012832088/article/details/80662241

5.kafka Connection to node -1 could not be established. Broker may not be available.

解決:參考https://blog.csdn.net/qq_40633152/article/details/81090306

寫在最後

注意:ELK各個版本之間安裝和配置有區別。覺得文章有幫助的,麻煩點個關注,謝謝!

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • webpack 工程師的自我修養:多頁面配置