什么是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地址