ELK之一-----Elasticsearch介紹與部署


什么是ELK

ELK介紹

通俗來講ELK是由Elasticsearch、Logstash、Kibana三個開源軟件的組成的一個組合體,這三個軟件當中,每個軟件用於完成不同的功能,ELK又稱為ELK stack,官方域名為elastic.co ELK stack的主要優點有如下幾個:

  • 處理方式靈活:elasticsearch 是實時 全文索引,具有強大的搜索 功能
  • 配置相對簡單:elasticsearch全部使用JSON接口logstash使用模塊配置kibana的配置文件部分更簡單 。
  • 檢索性能高效:基於優秀的設計,雖然每次查詢都是實時,但是也可以達到百億級數據的查詢秒級響應 。
  • 集群線性擴展:elastic search和logstash都可以靈活線性擴展
  • 前端操作絢麗:kibana的前端設計比較絢麗,而且操作簡單

什么是Elasticsearch

是一個高度可擴展的開源全文搜索和分析引擎,它可實現數據的實時全文搜索搜索、支持分布式可實現高可用、提供API接口,可以處理大規模日志數據,比如:Nginx 、Tomcat、系統日志等功能 。

什么是Logstash

可以通過插件實現日志收集和轉發,支持日志過濾,支持普通log 、自定義json格式的日志解析 。

什么是kibana

主要是通過接口調用elasticsearch的數據,並進行前端數據可視化的展現。

為什么使用ELK

ELK組件在海量日志系統的運維中,可用於解決以下主要問題:

  • 分布式日志數據統一收集 ,實現 集中式查詢和管理
  • 故障排查
  • 安全信息和事件管理
  • 報表功能報表功能


ELK組件在大數據運維系統中,主要可解決的問題如下:

  • 日志查詢,問題排查,故障恢復日志查詢,問題排查,故障恢復,故障自愈
  • 應用日志應用日志分析分析,錯誤報警,錯誤報警
  • 性能分析,用戶行為分析和性能分析

使用場景:

部署elasticsearch集群

以下是在兩個主機上部署elasticsearch服務器

1、安裝部署JDK環境

1、官網下載1.8.x的JDK包,並配置環境變量

官方下載JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

[root@elk-1 src]# tar xvf jdk-8u212-linux-x64.tar.gz  # 解壓JDK包
[root@elk-1 src]# ln -sv /usr/local/src/jdk1.8.0_212/ /usr/local/jdk  #創建jdk軟鏈接
‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’
[root@elk-1 src]# ln -sv  /usr/local/jdk/bin/java /usr/bin/java  # 創建java軟鏈接
‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’

[root@elk-1 src]# vim /etc/profile # 修改配置文件的環境變量
export HISTTIMEFORMAT="%F %T `whoami`"
export export LANG="en_US.utf-8"
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

[root@elk-1 src]# .  /etc/profile  # 使環境變量生效

2、驗證jdk版本和jdk環境

[root@elk-1 ~]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[root@elk-1 ~]# echo $JAVA_HOME
/usr/local/jdk 

3、格式化新加的100g磁盤,並掛載到/data目錄下

[root@elk-1 src]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 99.5G  0 part 
  ├─centos-root 253:0    0 99.5G  0 lvm  /
  └─centos-swap 253:1    0    4M  0 lvm  [SWAP]
sdb               8:16   0  100G  0 disk 
sr0              11:0    1  942M  0 rom  
[root@elk-1 src]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=6553600 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=12800, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@elk-1 src]# mkdir /data  # 創建一個掛載的/data目錄

4、開始寫入到/etc/fstab配置文件中,設置為開機啟動的掛載光盤,掛載完光盤之后,最好重啟linux系統,查看是否真正生效

                                                                                                                                                                                                                                                                                      
[root@elk-1 src]# vim /etc/fstab 
# /etc/fstab
# Created by anaconda on Sat Jan  4 16:31:31 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=64d9f83a-34c5-4025-94ff-504ca7a00a3f /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb               /data                     xfs    defaults       0 0   #  掛載到指定的/data目錄下

[root@elk-1 src]# mount -a   # 使自動掛載生效
[root@elk-1 src]# df -Th  # 查看掛載信息
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                   tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs                   tmpfs     1.9G   12M  1.9G   1% /run
tmpfs                   tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       100G  2.0G   98G   2% /
/dev/sda1               xfs       509M  143M  367M  29% /boot
tmpfs                   tmpfs     378M     0  378M   0% /run/user/0
/dev/sdb                xfs       100G   33M  100G   1% /data

2、下載並部署elasticsearch

清華大學下載地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/

官網下載地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

1、安裝elasticsearch包

[root@elk-1 src]# yum install elasticsearch-6.8.1.rpm  -y

2、修改elasticsearch配置文件

[root@elk-1 src]# vim /etc/elasticsearch/elasticsearch.yml
bootstrap.memory_lock: true  # 開啟的話就會固定占用默認的1g內存
cluster.name: elk-cluster  # cluster集群名稱,與其他集群的名稱一致
node.name: node-1  # 寫一個node名稱,與其他node名稱不一致
path.data: /data/esdata # 將數據保存在掛載的獨立的data磁盤目錄下
path.logs: /data/eslog  #日志保存的目錄
network.host: 0.0.0.0  # 監聽的IP地址
http.port: 9200  #監聽的端口號
discovery.zen.ping.unicast.hosts: ["192.168.7.100", "192.168.7.101"]  # 寫出組播地址,有幾個elasticsearch就寫幾個IP地址

3、將此配置文件傳到另外一個elasticsearch主機上,修改node名稱即可,實現集群分布

[root@elk-1 src]# scp  /etc/elasticsearch/elasticsearch.yml 192.168.7.101:/etc/elasticsearch/elasticsearch.yml  #傳到另外一個主機
[root@elk-1 src]# vim /etc/elasticsearch/elasticsearch.yml
bootstrap.memory_lock: true  # 開啟的話就會固定占用默認的1g內存
cluster.name: elk-cluster  # cluster集群名稱,與其他集群的名稱一致
node.name: node-2  # 寫一個node名稱,與其他node名稱不一致,將此處的node名稱修改為node-2即可
path.data: /data/esdata # 將數據保存在掛載的獨立的data磁盤目錄下
path.logs: /data/eslog  #日志保存的目錄
network.host: 0.0.0.0  # 監聽的IP地址
http.port: 9200  #監聽的端口號
discovery.zen.ping.unicast.hosts: ["192.168.7.100", "192.168.7.101"]  # 寫出兩個集群單播地址,有幾個elasticsearch就寫幾個IP地址

修改elasticsearch內存限制,並同步配置文件(集群的兩個主機都要寫入)

官方文檔介紹:https://discuss.elastic.co/t/memory-lock-not-working/70576

1、由於上面默認的最大占用固定內存是1g,生產中肯定不夠使用,我們需要將占用的固定內存改為物理機內存的50%,最大不要超過32G。

[root@elk-1 ~]# vim /usr/lib/systemd//system/elasticsearch.service 
LimitMEMLOCK=infinity  # 修改elasticsearch啟動服務的無限制使用內存

2、修改elasticsearch的內存使用配置文件,將最大最小內存設置一樣

[root@elk-1 ~]# vim /etc/elasticsearch/jvm.options 
-Xms2g  # 最小內存為2g
-Xmx2g   # 最大內存為2g

3、啟動elasticsearch服務

[root@elk-1 src]# chown elasticsearch.elasticsearch  /data -R  #修改兩個主機掛載的數據權限,然后啟動elasticsearch服務
[root@elk-1 ~]# systemctl daemon-reload
[root@elk-1 src]# systemctl start elasticsearch

4、啟動elasticsearch服務之后,查看log日志和端口是否已經啟動,可以看到此時的9200和9300端口已經打開了。

[root@elk-1 elasticsearch]# tail -f  /data/eslog/elk-cluster.log
[root@elk-1 ~]# ss -nlt
State       Recv-Q Send-Q                           Local Address:Port                                          Peer Address:Port              
LISTEN      0      100                                  127.0.0.1:25                                                       *:*                  
LISTEN      0      128                                          *:22                                                       *:*                  
LISTEN      0      100                                      [::1]:25                                                    [::]:*                  
LISTEN      0      20480                                     [::]:9200                                                  [::]:*                  
LISTEN      0      20480                                     [::]:9300                                                  [::]:*                  
LISTEN      0      128                                       [::]:22                                                    [::]:*   

5、在網頁上訪問elasticsearch,查看是否能夠訪問:192.168.7.100:9200、 192.168.7.101:9200

6、修改/etc/security/limits.conf配置文件,centos系統前面寫*可以生效,但是ubuntu需要寫上elsaticsearch用戶名,才能生效。

*                soft    core          unlimited
*                hard    core          unlimited
*                soft    nproc         1000000
*                hard    nproc         1000000
*                soft    nofile        1000000
*                hard    nofile        1000000
*                soft    memlock       32000
*                hard    memlock       32000
*                soft    msgqueue      8192000
*                hard    msgqueue      8192000

7、此時可以看到軟限制和硬限制已經是最大值

[root@elk-2 src]# ulimit -n
1000000

監控elasticsearch集群服務器的健康性

用curl命令對集群的健康性狀態進行檢查,如果返回值是green,說明正常,是yellow,說明是副本的分片丟失,如果是red,表示主片丟失。

[root@elk-2 ~]# curl -sXGET http://192.168.7.100:9200/_cluster/health?pretty=true  # curl的IP地址是對端集群的IP地址,非本地的IP地址
{
  "cluster_name" : "elk-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 4,
  "active_shards" : 8,
  "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
}

 

 以下是編輯對集群健康性檢查的python腳本,如果返回值是50,說明elasticsearch集群正常。

#!/usr/bin/env python
#coding:utf-8
#Author liu
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import subprocess
body = ""
false="false"
obj = subprocess.Popen(("curl -sXGET http://192.168.7.100:9200/_cluster/health?pretty=true"),shell=True,stdout=subprocess.PIPE)
data=obj.stdout.read()
data1=eval(data)
status=data1.get("status")
if status == "green":
        print("50")
else:
        print("100")

執行腳本,返回值是50,說明集群正常。

[root@elk-2 ~]# python  es.py
50

在阿里雲下載安裝docker-ce

阿里雲docker-ce安裝地址:https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11yxp9kR

1、yum安裝docker-ce容器:以下是阿里雲安裝步驟

# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啟Docker服務
sudo service docker start

# 注意:
# 官方軟件源默認啟用了最新的軟件,您可以通過編輯軟件源的方式獲取各個版本的軟件包。例如官方並沒有將測試版本的軟件源置為可用,您可以通過以下方式開啟。同理可以開啟各種測試版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   將[docker-ce-test]下方的enabled=0修改為enabled=1
#
# 安裝指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安裝指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

2、修改elsaticsearch配置文件

[root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml  # 允許所有的插件可以訪問elasticsearch
http.cors.enabled: true  
http.cors.allow-origin: "*"

3、下載安裝elasticsearch的插件head。

插件是為了完成不同的功能,官方提供了一些插件但大部分是收費的,另外也有一些開發愛好者提供的插件,可以實現對 elasticsearch 集群的狀態監控與管理配置等功能。

在elasticsearch 5.x版本以后不再支持,直接安裝head插件,而是需要通過啟動一個服務方式。

gitlab下載插件地址:https://github.com/mobz/elasticsearch-head/releases,下載的包有800多M。

將下載的elasticsearch-head-5.tar.gz 包傳到docker中,然后使用容器進行

[root@elk-1 ~]# docker load -i elasticsearch-head-5.tar.gz 
b6ca02dfe5e6: Loading layer [==================================================>]  128.9MB/128.9MB
60a0858edcd5: Loading layer [==================================================>]  45.19MB/45.19MB
53c779688d06: Loading layer [==================================================>]  126.6MB/126.6MB
0a5e2b2ddeaa: Loading layer [==================================================>]  330.5MB/330.5MB
fa18e5ffd316: Loading layer [==================================================>]  352.3kB/352.3kB
604c78617f34: Loading layer [==================================================>]  113.7kB/113.7kB
cf2eea3d6e04: Loading layer [==================================================>]  50.16MB/50.16MB
d556e03b8284: Loading layer [==================================================>]   2.56kB/2.56kB
95ea76455b84: Loading layer [==================================================>]  12.72MB/12.72MB
ce5705289a91: Loading layer [==================================================>]  4.096kB/4.096kB
d09533ddfc0d: Loading layer [==================================================>]  143.3MB/143.3MB
eb415bbb4658: Loading layer [==================================================>]  23.71MB/23.71MB

4、在dokcer容器中查看elasticsearch-head名稱,並啟動。

[root@elk-1 ~]# docker images  # 查看elasticsearch-head鏡像名稱
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
mobz/elasticsearch-head   5                   b19a5c98e43b        3 years ago         824MB
[root@elk-1 ~]# docker run -d -p 9100:9100 mobz/elasticsearch-head:5  # 在docker容器中映射9100端口,啟動elasticsearch-head插件
48ce2547c70b1152706d8e01e406a507d6613235177a82e9e4c271fc7ce0819a

5、訪問網頁結果:192.168.7.100:9100,然后連接另一台集群主機的IP地址

 

 

 

 

 

 

 

 

  

  

 

 


免責聲明!

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



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