ELK詳細安裝部署


一、前言

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

? 但是日志通常都是存儲在各自的服務器中。如果管理數十台服務器, 查閱日志需要依次登陸不同的服務器,查看過程就會很繁瑣從而導致工作效率低下。雖然可以使用 rsyslog 服務將日志匯總。但是統計一些日志中的數據或者檢索也是很麻煩的,一般使用grep、awk、wc、sort等Linux命令來統計和檢索。如果對數量巨大的日志進行統計檢索,人工的效率還是十分低下。

? 通過我們對日志進行收集、匯總到一起,完整的日志數據具有非常重要的作用:

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

二、ELK簡介

? ELK實時日志收集分析系統可以完美的解決以上問題。ELK作為一款開源軟件可以免費使用,也有強大的團隊和社區對它實時更新。

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

Elasticsearch?:分布式搜索引擎。具有高可伸縮、高可靠、易管理等特點。可以用於全文檢索、結構化檢索和分析,並能將這三者結合起來。Elasticsearch 是用Java 基於 Lucene 開發,現在使用最廣的開源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基於它來構建自己的搜索引擎。

在elasticsearch中,所有節點的數據是均等的。

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

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

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

版本說明:

Elasticsearch、Logstash、Kibana、Filebeat安裝的版本號必須全部一致,不然會出現kibana無法顯示web頁面。

ELK工作演示圖:

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

技術圖片

三、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監控個自定義文件,手動插入數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM