ELK詳細安裝部署

1、前言

? 日誌主要包括系統日誌和應用程序日誌,運維和開發人員能夠經過日誌瞭解服務器中軟硬件的信息,檢查應用程序或系統的故障,瞭解故障出現的緣由,以便解決問題。分析日誌能夠更清楚的瞭解服務器的狀態和系統安全情況,從而能夠維護服務器穩定運行。java

? 可是日誌一般都是存儲在各自的服務器中。若是管理數十臺服務器, 查閱日誌須要依次登錄不一樣的服務器,查看過程就會很繁瑣從而致使工做效率低下。雖然可使用 rsyslog 服務將日誌彙總。可是統計一些日誌中的數據或者檢索也是很麻煩的,通常使用grep、awk、wc、sort等Linux命令來統計和檢索。若是對數量巨大的日誌進行統計檢索,人工的效率仍是十分低下。node

? 經過咱們對日誌進行收集、彙總到一塊兒,完整的日誌數據具備很是重要的做用:linux

  1. 信息查找。經過檢索日誌信息,查找相應的報錯,能夠快速的解決BUG。
  2. 數據分析。若是是截斷整理格式化後的日誌信息,能夠進一步對日誌進行數據分析和統計,能夠選出頭條,熱點,或者爆款。
  3. 系統維護。對日誌信息分析能夠了解服務器的負荷和運行狀態。能夠針對性的對服務器進行優化。

2、ELK簡介

? ELK實時日誌收集分析系統能夠完美的解決以上問題。ELK做爲一款開源軟件能夠無償使用,也有強大的團隊和社區對它實時更新。nginx

? ELK主要由ElasticSearch、Logstash和Kibana三個開源工具組成,還有其餘專門因爲收集數據的輕量型數據採集器Beats。web

Elasticsearch?:分佈式搜索引擎。具備高可伸縮、高可靠、易管理等特色。能夠用於全文檢索、結構化檢索和分析,並能將這三者結合起來。Elasticsearch 是用Java 基於 Lucene 開發,如今使用最廣的開源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基於它來構建本身的搜索引擎。數據庫

在elasticsearch中,全部節點的數據是均等的。bootstrap

Logstash?:數據收集處理引擎。支持動態的從各類數據源蒐集數據,並對數據進行過濾、分析、豐富、統一格式等操做,而後存儲以供後續使用。vim

Kibana?:可視化化平臺。它可以搜索、展現存儲在 Elasticsearch 中索引數據。使用它能夠很方便的用圖表、表格、地圖展現和分析數據。安全

Filebeat:輕量級數據收集引擎。相對於Logstash所佔用的系統資源來講,Filebeat 所佔用的系統資源幾乎是微乎及微。它是基於原先 Logstash-fowarder 的源碼改造出來。換句話說:Filebeat就是新版的 Logstash-fowarder,也會是 ELK Stack 在 Agent 的第一選擇。ruby

版本說明:

Elasticsearch、Logstash、Kibana、Filebeat安裝的版本號必須所有一致,否則會出現kibana沒法顯示web頁面。

ELK工做演示圖:

  1. Filebeat在APP Server端收集日誌
  2. Logstash處理過濾Filebeat收集過來的日誌
  3. Elasticsearch存儲Logstash提供的處理以後的日誌,用以檢索、統計
  4. Kibana提供web頁面,將Elasticsearch的數據可視化的展現出來

技術圖片

3、ELK安裝部署

1 . 首先配置JDK環境

#自行下載jdk
 rpm -ivh  jdk-8u144-linux-x64.rpm
 #或者 yum install java-1.8.0-openjdk*
 vim /etc/profile.d/java.sh
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
    export PATH=$JAVA_HOME/jre/bin:$PATH
 
 source /etc/profile.d/java.sh

2 . 配置ELK yum源

vim /etc/yum.repo.d/ELK.repo
[ELK]
name=ELK-Elasticstack
baseurl=https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-6.x/
gpgcheck=0
enabled=1

#關閉selinux
setenforce 0
sed -i.bak  's@^SELINUX=\(.*\)@SELINUX=disabled@p' /etc/selinux/config

#關閉防火牆
#Centos7
systemctl disable firewalld
systemctl stop firewalld
#CentOS6
service iptables stop
service iptables disable

3 . 部署elasticsearch

1. 安裝elasticsearch

yum install elasticsearsh

# 修改系統配置文件屬性
#   vim  /etc/security/limits.conf 
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch soft nofile 65536
elasticsearch hard nofile 131072

技術圖片

2. 修改配置文件

#  vim /etc/elasticsearch/elasticsearch.yml
#集羣名稱
cluster.name: els
#節點名稱
node.name: els-1
#數據存放路徑
path.data: /data/els_data
#日誌存放路徑
path.logs: /data/log/els
#鎖定jvm.options指定的內存,不交換swap內存
bootstrap.memory_lock: true
#綁定IP地址
network.host: 172.16.1.49
#端口號
http.port: 9200


#配置集羣配置,填寫集羣節點,會自動發現節點
#  discovery.zen.ping.unicast.hosts: ["host1", "host2"]
# 集羣配置 只須要修改節點名,和綁定ip地址便可

#  vim /etc/elasticsearch/jvm.options
-Xms1g  #指定佔用內存大小,兩個數字要一致 都是1g
-Xmx1g

3. 建立數據目錄

#建立elasticsearch數據庫目錄,而且修改屬主爲elasticsearch·
mkdir /data/els_data
mkdir /data/log/els
chown -R elasticsearch.elasticsearch /data/els_data
chown -R elasticsearch.elasticsearch /data/log/els

4. 啓動elasticsearch

systemctl start elasticsearch
# 啓動後自動關閉
#報錯
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked

#將配置文件中的 bootstrap.memory_lock: true 註釋掉,不使用;便可啓動成功

報錯技術圖片

啓動成功後

訪問172.16.1.49:9200

技術圖片

Elasticsearch API

  • 集羣狀態:http:// 172.16.1.100:9200/_cluster/health?pretty
  • 節點狀態:http:// 172.16.1.100:9200/_nodes/process?pretty
  • 分片狀態:http:// 172.16.1.100:9200/_cat/shards
  • 索引分片存儲信息:http:// 172.16.1.100:9200/index/_shard_stores?pretty
  • 索引狀態:http:// 172.16.1.100:9200/index/_stats?pretty
  • 索引元數據:http:// 172.16.1.100:9200/index?pretty

4. 部署Kibana

Kibana是node.js 編寫的,不須要java環境。直接安裝便可

1. 安裝Kibana

yum install kibana
# 版本號須要和Elasticsearch 相同

技術圖片

2. 配置Kibana

vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "172.16.1.50"
elasticsearch.url: "http://172.16.1.49:9200"
kibana.index: ".kibana"
logging.dest: /data/log/kibana/kibana.log # 配置kibana日誌輸出到哪裏

# 建立日誌目錄文件
mkdir -p /data/log/kibana/
touch /data/log/kibana/kibana.log
chmod o+rw  /data/log/kibana/kibana.log

訪問172.16.1.50:5601

出現 Kibana server is not ready yet

說明kibanaElasticsearch版本號不一致

# 查看版本號
rpm -qa elasticsearch kibana

若是版本號如出一轍,那就多刷新幾回頁面吧。。。。

啓動成功後,訪問頁面能夠看到:

技術圖片

5. 部署Logstash

配置與Elasticsearch相同的Java環境,版本爲8以上的Java環境。

1. 安裝Logstash

yum install logstash-"Version"

2. 修改配置文件

http.host: "172.16.1.229"
http.port: 9600-9700

3. 配置收集nginx日誌配置文件

  1. 修改nginx的日誌格式
log_format main '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"request":"$request",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}';

access_log /var/log/nginx/access_test.log  main;
  1. 配置Lostash收集日誌配置文件
input {
        file {
                type =>"nginx-log"
                path => ["/var/log/nginx/access.log"]
                start_position => "beginning"
                sincedb_path => "/dev/null"
                }
}

output {
        elasticsearch {
                hosts => ["172.16.1.49:9200"]
                index => "nginx-log-%{+YYYY.MM}"
        }
}

4. 測試配置文件可用性

cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf  --config.test_and_exit

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2019-02-20T17:34:29,949][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
Configuration OK # 配置文件OK 可使用
[2019-02-20T17:34:39,048][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

WARN報錯不影響運行

直接使用命令

./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf

就能夠直接運行logstash

6. 部署filebeat

? Logstash的數據都是從Beats中獲取,Logstash已經不須要本身去數據源中獲取數據了。

? 之前咱們使用的日誌採集工具是logstash,可是logstash佔用的資源比較大,沒有beats輕量,因此官方也推薦使用beats來做爲日誌採集工具。並且beats可擴展,支持自定義構建。

yum install filebeat-6.6.0

1. 修改filebeat配置文件

vim /etc/filebeat/filebeat.yml

- type: log
    paths:
        - /Log_File #/var/log/messages
        
#output.elasticsearch: #註釋掉輸出到elasticsearch的配置 
    # hosts: ["localhost:9200"]
    
output.console: #添加輸出到當前終端的配置
    enable: true

2. 測試filebeat

/usr/share/filebeat/bin/filebeat -c  /etc/filebeat/filebeat.yml #運行filebeat,能夠看見日誌輸出在當前終端

3. 修改配置將日誌輸出到elasticsearch中

- type: log
    paths:
        - /Log_File #/var/log/messages
        
output.elasticsearch: #註釋掉輸出到elasticsearch的配置 
    hosts: ["172.16.1.49:9200"]

啓動 filebeat systemctl start filebeat

運行curl ‘172.16.1.49:9200/_cat/indices?v‘,查看日誌索引

技術圖片

4. 在Kibana中配置索引

技術圖片

技術圖片

技術圖片

技術圖片

便可查看到日誌

5. 將日誌輸出到logstash中

#------------------- Logstash output ----------------------
output.logstash:  #將輸出到elasticsearch的配置註釋
  # The Logstash hosts
  hosts: ["172.16.1.229:5044"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

  # Certificate for SSL client authentication
  #ssl.certificate: "/etc/pki/client/cert.pem"

  # Client Certificate Key
  #ssl.key: "/etc/pki/client/cert.key"

6. 配置logstash

vim /etc/logstash/conf.d/test.conf
input { 
        beats { 
                port =>5044
                }
}
#filter{}  #過濾器,自定義過濾日誌中的一些數據
output {
        stdout {
                codec => rubydebug
        }
        elasticsearch {
                hosts => "172.16.1.49:9200"
                index => "test-log-%{+YYYY.MM.dd}"
        }
}

技術圖片

Elasticsearch上已經有了日誌索引,在kibana上也能夠查看到

yellow 表示沒有副本節點可用,由於測試時沒有搭建兩臺Elasticsearch

能夠用filebeat監控個自定義文件,手動插入數據。

相關文章
相關標籤/搜索