ELK概述:
ELK是三个开源软件的缩写简称 ,分别为:Elasticsearch , Logstash, Kibana , 它们都是开源软件;
ELK作为一个日志收集和检索系统,ELK 平台可以用于实现日志收集、日志搜索和日志分析;
elk集群还可以包含FileBeat组件,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具
ELK相关组件详解:
- Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
- Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
- Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
- Filebeat隶属于Beats。目前Beats包含四种工具:
Packetbeat(搜集网络流量数据)
Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集 Windows 事件日志数据
ELK 的使用流程为:
系统种的服务及应用产生的数据,logstash 从应用收集数据,将数据放入 es,使用 kibana 进行数据展示以及分析。
ELK是一套完整的集中式日志分析方案,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且全部是开源软件,组件之间互相配合使用,完美衔接,高效的满足了很多场合的应用,目前主流的一种日志系统方案
相关组件:
【Filebeat】
【Logstash】
【Elasticsearch】
【Kibana】
官方文档:
【中文社区 】
# 相关组件详细文档:
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html
https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html
https://www.elastic.co/guide/en/logstash/5.6/index.html
https://www.elastic.co/guide/en/kibana/5.5/index.html
ELK集群组件安装:
#elk部署软件包,官方下载(当前为elk8.3.1版本)
wget https://artifacts.elastic.co/downloads/logstash/logstash-8.3.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.3.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.3.1-linux-x86_64.tar.gz、
#查看下载安装包
ll -h |grep 8.3
-rw-r--r-- 1 root root 515M 6月 30 21:41 elasticsearch-8.3.1-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 258M 6月 30 21:50 kibana-8.3.1-linux-x86_64.tar.gz
-rw-r--r-- 1 root root 326M 6月 30 21:53 logstash-8.3.1-linux-x86_64.tar.gz
#创建es安装工作目录
mkdir -p /usr/local/elk
ls -d /usr/local/elk
/usr/local/elk
#把下载的安装包解压到指定的目录(解压到创建的es共组目录)
tar zxvf elasticsearch-8.3.1-linux-x86_64.tar.gz -C /usr/local/elk/
#查看es服务文件
ls /usr/local/elk
elasticsearch-8.3.1
ls /usr/local/elk/elasticsearch-8.3.1/
bin config data jdk lib LICENSE.txt logs modules NOTICE.txt plugins README.asciidoc
#es不能以root用户去启动,创建es管理用户
useradd es
#es文件修改所属用户
chown -R es:es /usr/local/elk
#切换用户,查看文件
su - es
ll -ld /usr/local/elk/
drwxr-xr-x 3 es es 33 7月 3 23:56 /usr/local/elk/
#使用es用户,查看es文件所属用户及所属组
ll -h /usr/local/elk/elasticsearch-8.3.1/
总用量 880K
drwxr-xr-x 2 es es 4.0K 6月 30 02:46 bin
drwxr-xr-x 4 es es 253 7月 4 00:10 config
drwxrwxr-x 5 es es 87 7月 4 01:04 data
drwxr-xr-x 8 es es 96 6月 30 02:46 jdk
drwxr-xr-x 5 es es 4.0K 6月 30 02:46 lib
-rw-r--r-- 1 es es 3.8K 6月 30 02:39 LICENSE.txt
drwxr-xr-x 2 es es 4.0K 7月 4 00:58 logs
drwxr-xr-x 66 es es 4.0K 6月 30 02:47 modules
-rw-r--r-- 1 es es 855K 6月 30 02:43 NOTICE.txt
drwxr-xr-x 2 es es 6 6月 30 02:44 plugins
-rw-r--r-- 1 es es 2.7K 6月 30 02:39 README.asciidoc
#修改es启动配置文件(启用如下配置即可)
egrep "^[^#]" /usr/local/elk/elasticsearch-8.3.1/config/elasticsearch.yml
cluster.name: my-es
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
#启动es服务
/usr/local/elk/elasticsearch-8.3.1/bin/elasticsearch
安装es时,未对系统配置文件做优化调整,会出现以下错误:
ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lines before starting Elasticsearch.
bootstrap check failure [1] of [2]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
bootstrap check failure [2] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
具体问题解析如下所示:
#问题一:主要是文件权限配置的问题
es用户拥有的可创建文件描述的权限太低,至少需要如错误问题所述的65536
问题解决:
使用root用户,添加如下内容,配置最小文件权限
egrep "^[^#]" /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
es - nproc 65536
#查看确认修改配置是否生效
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3818
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 65536 #确认到配置已生效
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
#问题二:主要时虚拟内存大小的问题
max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
问题解决:
使用root用户,添加如下配置,配置虚拟内存大小
egrep "^[^#]" /etc/sysctl.conf
vm.max_map_count=262144
修改配置文件立即生效
sysctl -p
vm.max_map_count = 262144
或者
echo 262144 > /proc/sys/vm/max_map_count
#重新启动es服务(启动后服务正常启动,使用web方式却时无法连接的)
/usr/local/elk/elasticsearch-8.3.1/bin/elasticsearch
.........
......
...
[2022-07-04T22:31:39,486][INFO ][o.e.i.g.DatabaseNodeService] [node-1] successfully loaded geoip database file [GeoLite2-Country.mmdb]
[2022-07-04T22:31:39,649][INFO ][o.e.i.g.DatabaseNodeService] [node-1] successfully loaded geoip database file [GeoLite2-ASN.mmdb]
[2022-07-04T22:31:40,826][INFO ][o.e.i.g.DatabaseNodeService] [node-1] successfully loaded geoip database file [GeoLite2-City.mmdb]
#测试es服务(出现如下状态,需更改es的web认证方式)
curl 127.0.0.1:9200
curl: (52) Empty reply from server
问题发现:
[node-1] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/127.0.0.1:9200, remoteAddress=/127.0.0.1:56878}
出现如上问题,需要修改es生成的基本配置文件
#问题原因:是因为ES8默认开启了ssl认证,修改es的yml配置文即可
xpack.security.enabled: false
egrep "^[^#]" /usr/local/elk/elasticsearch-8.3.1/config/elasticsearch.yml
cluster.name: my-es
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
#修改es配置后,重新测试,如下状态出现elasticsearch的版本信息,同时,我们还可以使用浏览器访问,至此,我们的elasticsearch就安装并启动完成了
curl 127.0.0.1:9200
{
"name" : "node-1",
"cluster_name" : "my-es",
"cluster_uuid" : "TH4isYRERIe-qd7JBCO3Og",
"version" : {
"number" : "8.3.1",
"build_type" : "tar",
"build_hash" : "b9a6b2867996ba92ceac66cb5bafc6db25e7910e",
"build_date" : "2022-06-29T18:39:55.731992798Z",
"build_snapshot" : false,
"lucene_version" : "9.2.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
#web浏览器测试
http://192.168.1.10:9200/
#kibana服务文件指定解压到之前的工作目录即可
tar zxvf kibana-8.3.1-linux-x86_64.tar.gz -C /usr/local/elk/
#查看kibana服务文件
ls /usr/local/elk/kibana-8.3.1/
bin config data LICENSE.txt logs node node_modules NOTICE.txt package.json plugins README.txt src x-pack
#修改kibana配置文件(默认无配置,启用以下配置即可)
egrep "^[^#]" /usr/local/elk/kibana-8.3.1/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
#创建用户(默认不要使用root用户直接启动)
useradd kibana
#kibana服务文件授权
chown kibana:kibana -R /usr/local/elk/kibana-8.3.1/
ll -h /usr/local/elk/kibana-8.3.1/
总用量 1.2M
drwxr-xr-x 2 kibana kibana 146 6月 29 20:33 bin
drwxr-xr-x 2 kibana kibana 44 7月 4 23:13 config
drwxr-xr-x 2 kibana kibana 6 6月 29 20:33 data
-rw-r--r-- 1 kibana kibana 3.8K 6月 29 20:33 LICENSE.txt
drwxr-xr-x 2 kibana kibana 6 6月 29 20:33 logs
drwxr-xr-x 6 kibana kibana 108 6月 29 20:33 node
drwxr-xr-x 677 kibana kibana 20K 6月 29 20:33 node_modules
-rw-r--r-- 1 kibana kibana 1.1M 6月 29 20:33 NOTICE.txt
-rw-r--r-- 1 kibana kibana 738 6月 29 20:33 package.json
drwxr-xr-x 2 kibana kibana 6 6月 29 20:33 plugins
-rw-r--r-- 1 kibana kibana 3.9K 6月 29 20:33 README.txt
drwxr-xr-x 11 kibana kibana 177 6月 29 20:33 src
drwxr-xr-x 3 kibana kibana 79 6月 29 20:33 x-pack
#使用kibana用户启动kibana服务
/usr/local/elk/kibana-8.3.1/bin/kibana
#web浏览器访问kibana
http://192.168.1.10:5601/app/home#/
进入kibana后,如下所示:
#logstash服务文件解压到工作目录
tar zxvf logstash-8.3.1-linux-x86_64.tar.gz -C /usr/local/elk/
#查看文件
ls /usr/local/elk/logstash-8.3.1/
bin CONTRIBUTORS Gemfile jdk lib logstash-core modules tools x-pack
config data Gemfile.lock JDK_VERSION LICENSE.txt logstash-core-plugin-api NOTICE.TXT vendor
#创建logstash工作用户
useradd logstash
#配置文件所属用户及所属组权限
chown logstash:logstash -R /usr/local/elk/logstash-8.3.1/
ll -h /usr/local/elk/logstash-8.3.1/
总用量 576K
drwxr-xr-x 2 logstash logstash 4.0K 7月 4 23:49 bin
drwxr-xr-x 2 logstash logstash 142 7月 5 00:08 config
-rw-r--r-- 1 logstash logstash 2.3K 6月 30 02:41 CONTRIBUTORS
drwxr-xr-x 2 logstash logstash 6 6月 30 02:41 data
-rw-r--r-- 1 logstash logstash 4.0K 6月 30 02:41 Gemfile
-rw-r--r-- 1 logstash logstash 29K 6月 30 02:41 Gemfile.lock
drwxr-xr-x 9 logstash logstash 121 7月 4 23:49 jdk
-rw-r--r-- 1 logstash logstash 18 6月 30 02:41 JDK_VERSION
drwxr-xr-x 6 logstash logstash 84 7月 4 23:49 lib
-rw-r--r-- 1 logstash logstash 14K 6月 30 02:41 LICENSE.txt
drwxr-xr-x 4 logstash logstash 90 7月 4 23:49 logstash-core
drwxr-xr-x 3 logstash logstash 86 7月 4 23:49 logstash-core-plugin-api
drwxr-xr-x 4 logstash logstash 55 7月 4 23:49 modules
-rw-r--r-- 1 logstash logstash 509K 6月 30 02:41 NOTICE.TXT
drwxr-xr-x 3 logstash logstash 30 7月 4 23:49 tools
drwxr-xr-x 4 logstash logstash 33 7月 4 23:49 vendor
drwxr-xr-x 9 logstash logstash 193 7月 4 23:49 x-pack
#配置logstash数据和日志存储路径
#创建用于存储logstash数据目录
mkdir -p /data/logstash/data
#修改目录权限
chown -R logstash:logstash /data/logstash/data
#创建日志目录
mkdir -p /data/logstash/log
#修改目录权限
chown -R logstash:logstash /data/logstash/log
#修改logstash配置文件
#设置data存储目录
path.data: /data/logstash/data
#设置配置文件目录
path.config: /usr/local/elk/logstash-8.3.1/config/
#设置日志存储目录
path.logs: /data/logstash/log
egrep "^[^#]" /usr/local/elk/logstash-8.3.1/config/logstash.yml
path.data: /logstash/data
path.config: /usr/local/elk/logstash-8.3.1/config/
path.logs: /data/logstash/log
#使用logstash用户启动logstash服务
/usr/local/elk/logstash-8.3.1/bin/logstash