快速搭建ELK7.5版本的日志分析系統--搭建篇



title: 快速搭建ELK7.5版本的日志分析系統--搭建篇

一、ELK安裝部署

官網地址:https://www.elastic.co/cn/
官網權威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
安裝指南:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/rpm.html

ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但並非全部

enter description here

  • Logstash :是一個用來搜集、分析、過濾日志的工具。它支持幾乎任何類型的日志,包括系統日志、錯誤日志和自定義應用程序日志。它可以從許多來源接收日志,這些來源包括 syslog、消息傳遞(例如 RabbitMQ)和JMX,它能夠以多種方式輸出數據,包括電子郵件、websockets和Elasticsearch。
  • Elasticsearch:是實時全文搜索和分析引擎,提供搜集、分析、存儲數據三大功能;是一套開放REST和JAVA API等結構提供高效搜索功能,可擴展的分布式系統。它構建於Apache Lucene搜索引擎庫之上。
  • Kibana:一個基於Web的圖形界面,用於搜索、分析和可視化存儲在 Elasticsearch指標中的日志數據。它利用Elasticsearch的REST接口來檢索數據,不僅允許用戶創建他們自己的數據的定制儀表板視圖,還允許他們以特殊的方式查詢和過濾數據。
  • Beats :輕量型采集器的平台,從邊緣機器向 Logstash 和 Elasticsearch 發送數據。
    Filebeat:輕量型日志采集器。
    https://www.elastic.co/cn/
    https://www.elastic.co/subscriptions

Input:輸入,輸出數據可以是Stdin、File、TCP、Redis、Syslog等。
Filter:過濾,將日志格式化。有豐富的過濾插件:Grok正則捕獲、Date時間處理、Json編解碼、Mutate數據修改等。
Output:輸出,輸出目標可以是Stdout、File、TCP、Redis、ES等。

基本概念

Node:運行單個ES實例的服務器
Cluster:一個或多個節點構成集群
Index:索引是多個文檔的集合
Document:Index里每條記錄稱為Document,若干文檔構建一個Index
Type:一個Index可以定義一種或多種類型,將Document邏輯分組
Field:ES存儲的最小單元
Shards:ES將Index分為若干份,每一份就是一個分片
Replicas:Index的一份或多份副本
ES 關系型數據庫(比如Mysql)

ES 關系型數據庫(比如Mysql)
Index Database
Type Table
Document Row
Field Column

准備環境

本次使用2台服務器來進行模擬集群,所以請准備2台服務器
Centos7.6 兩台
IP:192.168.73.133 安裝: elasticsearch、logstash、Kibana、java
192.168.73.135 安裝: elasticsearch、logstash

安裝JDK

yum安裝

[root@elk-master ~]# yum install -y java
[root@elk-master ~]# java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

源碼安裝JDK

下載安裝http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

配置Java環境
# tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/
# ln –s /usr/local/jdk1.8.0_91 /usr/local/jdk

# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile

看到如下信息,java環境配置成功
# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

配置安裝ElasticSearch

yum安裝

安裝elasticsearch的yum源的密鑰(這個需要在所有服務器上都配置)
[root@elk-master ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
 
配置elasticsearch的yum源 
在elasticsearch.repo文件中添加如下內容
[root@elk-master ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
安裝elasticsearch
[root@elk-master ~]# yum install -y elasticsearch

創建elasticsearch data的存放目錄,並修改該目錄的屬主屬組

# mkdir -p /data/es-data   (自定義用於存放data數據的目錄)
# chown -R elasticsearch:elasticsearch /data/es-data

修改elasticsearch的日志屬主屬組

# chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

修改elasticsearch的配置文件

[root@elk-master ~]# vim /etc/elasticsearch/elasticsearch.yml
找到配置文件中的cluster.name,打開該配置並設置集群名稱,是否作為主節點
cluster.name: elk-cluster
node.master: true
node.data: true
 
找到配置文件中的node.name,打開該配置並設置節點名稱
node.name: elk-1
 
修改data存放的路徑
path.data: /data/es-data
 
修改logs日志的路徑
path.logs: /var/log/elasticsearch/
 
監聽的網絡地址
network.host: 192.168.73.133
 
設置集群中的Master節點的初始列表,可以通過這些節點來自動發現其他新加入集群的節點
 discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]
 
 設置這個參數來保證集群中的節點可以知道其它N個有master資格的節點。默認為1,對於大的集群來說,可以設置大一點的值(2-4)
discovery.zen.minimum_master_nodes: 1

開啟監聽的端口
http.port: 9200
 
增加新的參數,這樣head插件可以訪問es (7.x版本,如果沒有可以自己手動加)
http.cors.enabled: true
http.cors.allow-origin: "*"

檢查配置
[root@elk-master ~]# grep -v ^# /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-cluster
node.name: elk-1
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 192.168.73.133
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"

集群主要關注兩個參數
discovery.zen.ping.unicast.hosts # 單播,集群節點IP列表。提供了自動組織集群,自動掃描端口9300-9305連接其他節點。無需額外配置。
discovery.zen.minimum_master_nodes # 最少主節點數
為防止數據丟失,這個參數很重要,如果沒有設置,可能由於網絡原因腦裂導致分為兩個獨立的集群。為避免腦裂,應設置符合節點的法定人數:(nodes / 2 ) + 1
換句話說,如果集群節點有三個,則最小主節點設置為(3/2) + 1 或2

啟動服務並設置開機啟動

[root@elk-master ~]# systemctl start elasticsearch && systemctl enable  elasticsearch

通過瀏覽器請求下9200的端口,看下是否成功

先檢查9200端口是否起來
[root@elk-master ~]# netstat -antp |grep 9200
tcp6       0      0 192.168.73.133:9200     :::*                    LISTEN      61375/java

瀏覽器訪問測試是否正常(以下為正常)
[root@elk-master ~]# curl http://192.168.73.133:9200/        
{
  "name" : "elk-1",
  "cluster_name" : "elk-cluster",
  "cluster_uuid" : "AtEF6eE2RXGw2_vv-WVcVw",
  "version" : {
    "number" : "7.5.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "e9ccaed468e2fac2275a3761849cbee64b39519f",
    "build_date" : "2019-11-26T01:06:52.518245Z",
    "build_snapshot" : false,
    "lucene_version" : "8.3.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

注意事項

需要修改幾個參數,不然啟動會報錯

vim /etc/security/limits.conf
在末尾追加以下內容(elk為啟動用戶,當然也可以指定為*)
elk soft nofile 65536
elk hard nofile 65536
elk soft nproc 2048
elk hard nproc 2048
elk soft memlock unlimited
elk hard memlock unlimited
 
繼續再修改一個參數
vim /etc/security/limits.d/90-nproc.conf
將里面的1024改為2048(ES最少要求為2048)
*          soft    nproc     2048
 
另外還需注意一個問題(在日志發現如下內容,這樣也會導致啟動失敗,這一問題困擾了很久)
[2017-06-14T19:19:01,641][INFO ][o.e.b.BootstrapChecks    ] [elk-1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2017-06-14T19:19:01,658][ERROR][o.e.b.Bootstrap          ] [elk-1] node validation exception
[1] bootstrap checks failed
[1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
    
解決:修改配置文件,在配置文件添加一項參數(目前還沒明白此參數的作用)
vim /etc/elasticsearch/elasticsearch.yml 
bootstrap.system_call_filter: false

node節點安裝

本次環境我們使用2台服務器,這2台服務器的服務搭建可以跟上面的步驟相同即可,配置文件按照以下修改

[root@k8s-node03 elasticsearch]# grep -v ^# /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-cluster
node.name: elk-2
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.73.135
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.73.133", "192.168.73.135"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
啟動服務並設置開機啟動
[root@k8s-node03 elasticsearch]# systemctl start elasticsearch && systemctl enable  elasticsearch

使用該地址可以查看node節點是否加入節點 http://192.168.73.133:9200/_cat/nodes?v
enter description here

也可以使用REST接口查看集群健康狀態:

[root@elk-master ~]# curl -i -XGET http://192.168.73.133:9200/_cluster/health?pretty
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 465

{
  "cluster_name" : "elk-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 5,
  "active_shards" : 10,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

查看集群節點:

[root@elk-master ~]# curl -i -XGET http://192.168.73.133:9200/_cat/nodes?pretty
HTTP/1.1 200 OK
content-type: text/plain; charset=UTF-8
content-length: 102

192.168.73.135 19 96 1 0.07 0.15 0.14 dilm - elk-2
192.168.73.133 16 96 7 0.54 0.45 0.35 dilm * elk-1

green:所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
yellow:所有的主分片已經分片了,但至少還有一個副本是缺失的。不會有數據丟失,所以搜索結果依然是完整的。不過,你的高可用性在某種程度上被弱化。如果 更多的 分片消失,你就會丟數據了。把 yellow 想象成一個需要及時調查的警告。
red:至少一個主分片(以及它的全部副本)都在缺失中。這意味着你在缺少數據:搜索只能返回部分數據,而分配到這個分片上的寫入請求會返回一個異常。
green/yellow/red 狀態是一個概覽你的集群並了解眼下正在發生什么的好辦法

安裝elasticsearch-head插件

安裝docker鏡像或者通過github下載elasticsearch-head項目都是可以的,1或者2兩種方式選擇一種安裝使用即可
Github下載地址:https://github.com/mobz/elasticsearch-head

1. 使用docker的集成好的elasticsearch-head
    # docker run -p 9100:9100 mobz/elasticsearch-head:5
    
    docker容器下載成功並啟動以后,運行瀏覽器打開http://localhost:9100/
 
2. 使用git安裝elasticsearch-head
    # yum install -y npm
    # git clone git://github.com/mobz/elasticsearch-head.git
    # cd elasticsearch-head
    # npm install
    # npm run start &
    檢查端口是否起來
    netstat -antp |grep 9100
    瀏覽器訪問測試是否正常
    http://IP:9100/

enter description here

集群健康值介紹:
黃色代表沒有主分片數據丟失,但是現在不是健康的狀態(警告)應該有10個分片,現在只有5個。
紅色代表有數據丟失
綠色代表正常
提示:es支持一個類似於快照的功能,方便我們用於數據備份

Head插件小缺點: 當我們索引特別多的時候,打開head至少需要五分鍾。因為它要把所有的索引都掃描一遍進行展示,這時候打開使用的帶寬也會特別大(不會出現超時,一直等待就可以)

LogStash的安裝使用

安裝Logstash環境:
官方安裝手冊:

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

下載yum源的密鑰認證:

[root@elk-master ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

利用yum安裝logstash

[root@elk-master ~]# yum install -y logstash

創建一個軟連接,每次執行命令的時候不用在寫安裝路勁(默認安裝在/usr/share下)

[root@elk-master ~]# ln -s /usr/share/logstash/bin/logstash /bin/

執行logstash的命令

[root@elk-master ~]# logstash -e 'input { stdin { } } output { stdout {} }'
hello world
test

然后等待stdout返回的結果
enter description here

注:
-e 執行操作
input 標准輸入
{ input } 插件
output 標准輸出
{ stdout } 插件

如果標准輸出到elasticsearch中保存下來,應該怎么玩,看下面

 [root@elk-master ~]# logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.73.133:9200"] } stdout { codec => rubydebug }}'     
I am ELK
who are you

enter description here

logstash使用配置文件

官方指南:

https://www.elastic.co/guide/en/logstash/current/configuration.html

創建配置文件elk.conf

input { stdin { } }
output {
  elasticsearch { hosts => ["192.168.73.133:9200"] }
  stdout { codec => rubydebug }
}

使用配置文件運行logstash

logstash -f ./elk.conf

運行成功以后輸入以及標准輸出結果
enter description here

logstash的插件類型

Input插件
 權威指南:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
    
file插件的使用
 # vim /etc/logstash/conf.d/elk.conf 
    添加如下配置
    input {
        file {
            path => "/var/log/messages"
            type => "system"
            start_position => "beginning"
            }
    }
    output {    
             elasticsearch {
                    hosts => ["192.168.1.202:9200"]
                    index => "system-%{+YYYY.MM.dd}"
                }
    }

運行logstash指定elk.conf配置文件,進行過濾匹配
#logstash -f /etc/logstash/conf.d/elk.conf

enter description here

來一發配置安全日志的並且把日志的索引按類型做存放,繼續編輯elk.conf文件

vim /etc/logstash/conf.d/elk.conf
添加secure日志的路徑
input {
    file {
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
    }
 
    file {
        path => "/var/log/secure"
        type => "secure"
        start_position => "beginning"
    }
}
 
output {
 
    if [type] == "system" {
 
        elasticsearch {
            hosts => ["192.168.1.202:9200"]
            index => "nagios-system-%{+YYYY.MM.dd}"
        }
    }
 
    if [type] == "secure" {
 
        elasticsearch {
            hosts => ["192.168.1.202:9200"]
            index => "nagios-secure-%{+YYYY.MM.dd}"
        }
    }
}

運行logstash指定elk.conf配置文件,進行過濾匹配
[root@elk-master ]# logstash -f /etc/logstash/conf.d/elk.conf

enter description here
這些設置都沒有問題之后,接下來安裝下kibana,可以讓在前台展示

Kibana的安裝及使用

安裝kibana環境
 
官方手冊:https://www.elastic.co/guide/en/kibana/current/install.html
 
下載kibana的tar.gz的軟件包
# yum install -y kibana 
 
編輯kibana的配置文件
# vim /etc/kibana/kibana.yml
 
修改配置文件如下,開啟以下的配置
server.port: 5601
server.host: "192.168.99.185"
elasticsearch.hosts: ["http://192.168.99.185:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
啟動服務並設置開機啟動
# systemctl start kibana &&systemctl enable  kibana
查看服務端口監聽情況
# netstat -auntlp |grep 5601
tcp        0      0 192.168.73.133:5601     0.0.0.0:*               LISTEN      61996/node
Kibana訪問方式
http://192.168.73.133:5601

等待加載完畢之后的界面如圖所示
enter description here
添加樣本數據

樣本數據儀表盤

專注開源的DevOps技術棧技術,可以關注公眾號,有問題歡迎一起交流


免責聲明!

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



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