這裡紀錄自學過程中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各個版本之間安裝和配置有區別。覺得文章有幫助的,麻煩點個關注,謝謝!