ELK8.1.0版本日志分析系统
因为篇幅有限,这里只有怎么安装并没有写怎么进行日志分析,之后会写对日志进行分析的文章
1. 百度百科上的ELK
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
2. ELK简介
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
ELK是由下面的三个组件组成他们合称为ELK
-
ElasticSearch
是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。- Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。
- Elasticsearch 是个分布式搜索和分析引擎,优点是能对大容量的数据进行接近实时的存储、搜索和分析操作。
-
Logstash:作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。
- Logstash 由JRuby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。
-
Kiabana:是基于 Node.js 开发的展示工具,可以为 Logstash 和 ElasticSearch 提供图形化的日志分析 Web 界面展示,可以汇总、分析和搜索重要数据日志。
-
Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。
3. ELK的工作原理
- 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
- Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
- Elasticsearch 对格式化后的数据进行索引和存储。
- Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
4. 使用ELK的好处
-
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
-
往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
-
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
5. 完整日志系统基本特征
- 收集:能够采集多种来源的日志数据
- 传输:能够稳定的把日志数据解析过滤并传输到存储系统
- 存储:存储日志数据
- 分析:支持 UI 分析
- 警告:能够提供错误报告,监控机制
6. ELK安装部署
环境说明:
系统版本为:redha8.2
注所有软件版本都是8.1.0版本
主机名 | 软件版本 | IP地址 |
---|---|---|
master | Elasticsearch | 192.168.182.137 |
node1 | elasticsearch | 192.168.182.143 |
server | logstash | 192.168.182.144 |
6.1 下载软件
[root@master ~]# wget https://www.elastic.co/downloads/past-releases/odbc-client-8-1-0
[root@master ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.1.0-linux-x86_64.tar.gz
[root@master ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-8.1.0-linux-x86_64.tar.gz
[root@master ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-8.1.0-linux-x86_64.tar.gz
6.2安装JDK
// 因为ELK使用java语言开发所以需要java环境,三台主机都需要安装
[root@master packages]# yum -y install java-latest-openjdk.x86_64 //这里我们安装最新的jdk,不想用yum安装的朋友可以使用编译安装
6.3 创建elk用户
[root@master packages]# useradd elsearch
[root@master packages]# echo '1' | passwd --stdin 'elsearch'
6.4 安装配置elasticsearch
注意修改elasticsearch.yml文件时请使用elk用户
[root@master packages]# tar xzf elasticsearch-8.1.0-linux-x86_64.tar.gz -C /usr/local/ //解压到/usr/local目录下
[root@master config]# pwd
/usr/local/elasticsearch-8.1.0/config
[root@master config]# cp elasticsearch.yml elasticsearch.yml-bak
17 cluster.name: my-elk //取消注释,这里是集群的名字
23 node.name: node1 //取消注释,这里是节点的名字,根据节点而变化
33 path.data: /data/elk-data //取消注释,这里指定数据存放目录
37 path.logs: /data/elk-logs //取消注释,这里指定日志存放目录
43 bootstrap.memory_lock: false //取消注释,false是启动elasticsearch时不锁定内存,true为锁定
56 network.host: 0.0.0.0 //取消注释,这里设置监听地址,这里我们监听所有网段的所有主机。
61 http.port: 9200 //取消注释,elasticsearch的默认监听地址
70 discovery.seed_hosts: ["master", "node2"] //取消注释,这里时集群发现通过单播实现,指定要发现的节点,也可以写IP地址
74 cluster.initial_master_nodes: ["master", "node1"]
6.5 创建elasticsearch的数据目录及日志目录
[root@master ~]# mkdir -p /data/elk-data
[root@master ~]# mkdir -p /data/elk-logs
[root@master ~]# chown -R elsearch.elsearch /data/elk-data/
[root@master ~]# chown -R elsearch.elsearch /data/elk-logs/
[root@master bin]# chown -R elsearch.elsearch /usr/local/elasticsearch-8.1.0/
6.6 系统优化
[root@master ~]# tail -5 /etc/security/limits.conf
* soft nofile 65535 //最多只能打开65535个文件数,超过就会报警
* hard nofile 131072 // 严格设定不允许超过
* soft nproc 4096
* hard nproc 4096
elk hard nofile 65536
elk soft nofile 65536
示例:
soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
hard xxx : 代表严格的设定,不允许超过这个设定的值。
nofile : 是每个进程可以打开的文件数的限制
nproc : 是操作系统级别对每个用户创建的进程数的限制
[root@master ~]# tail -1 /etc/sysctl.conf
vm.max_map_count=655360
[root@master ~]# sysctl -p
vm.max_map_count = 655360
6.7 配置环境变量
[root@master bin]# cat /etc/profile.d/elasticsearch.sh
export PATH=/usr/local/elasticsearch-8.1.0/bin:$PATH
[root@master bin]# source /etc/profile.d/elasticsearch.sh //使用source使其生效,这样在任何目录下都可以使用elasticsearch命令
6.8 启动elasticsearch
启动方式一:
// 因为elasticsearch用root用户启动会报错,所以我们需要使用elk用户来启动
[elk@master bin]$ pwd
/usr/local/elasticsearch-8.1.0/bin
[elk@master bin]$ nohup ./elasticsearch & // 在后台启动不会占用前台,nohup就是将打印到屏幕输出到nohup的文件里面去
启动方式二:
[root@master ~]# cat /usr/lib/systemd/system/elasticsearch.service
[Unit]
Description=elasticsearch server daemon
After=network.target sshd-keygen.target
[Service]
Type=simple //这里的simple是使用主进程运行elasticsearch这个程序,而不能使用forking,因为这个是以父进程的身份创建子进程来运行的,并且创建父进程后会退出
ExecStart=/usr/local/elasticsearch-8.1.0/bin/elasticsearch //若你的elasticsearch不在/usr/local下则需要根据自己的路径进行修改
#ExecStop=/usr/local/elasticsearch-8.1.0/bin
ExecReload=/bin/kill -HUP $MAINPID
User=elk //这个以elk身份运行
Group=elk
LimitNOFILE=100000
LimitNPROC=100000
Restart=no
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@master ~]# systemctl daemon-reload //重新加载system服务,使其生效
[root@master ~]# systemctl enable --now elasticsearch.service //设置为开机自启
[root@master ~]# ss -anlt | awk -F '*:' '{print $2}' //出现9200和9300说明启动成功,但是启动过程会有点慢,需要等一会,也有可能是我电脑太懒(慢)了
9200
9300
node1和master上操作一样的。不同的地方如下所示
[root@node1 config]# pwd
/usr/local/elasticsearch-8.1.0/config
[root@node1 config]# vim elasticsearch.yml
23 node.name: node1
7.1安装node.js、elasticsearch-head以及phantomjs
// 这个以上的组件为了优化以下界面
顺便说一下这个是elasticsearch启动成功之后能够访问到的界面
node.js下载地址
phantomjs下载地址
elasticsearch-head下载地址
以下操作在master和node1上都需要做
[root@node1 opt]# yum -y install bzip2 //安装这个命令是为了解压phantomjs
[root@node1 opt]# yum -y install gcc gcc-c++ make //安装依赖包,这个是为了编译node.js
[root@node1 opt]# tar -zxf node-v16.14.2.tar.gz -C /usr/local/ //我所有的包都放在opt目录下了,将其解压到/usr/local下
[root@node1 node-v16.14.2]# pwd
/usr/local/node-v16.14.2
[root@node1 node-v16.14.2]# ./configure --prefix=/usr/loca/nodejs
[root@node1 node-v16.14.2]# make && make install //这个需要编译好久好久。。。
[root@node1 bin]# cat /etc/profile.d/node.sh //配置环境变量
export PATH=/usr/local/nodejs/bin:$PATH
[root@node1 bin]# source /etc/profile.d/node.sh //使其生效
// 安装phantomjs
[root@node1 opt]# tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/
[root@node1 phantomjs-2.1.1-linux-x86_64]# cat /etc/profile.d/phantomjs.sh //配置环境变量,方便启动
export PATH=/usr/local/phantomjs-2.1.1-linux-x86_64/bin:$PATH
[root@node1 phantomjs-2.1.1-linux-x86_64]# source /etc/profile.d/phantomjs.sh
// 安装elasticsearch-head
[root@node1 opt]# tar -zxf elasticsearch-head-5.0.0.tar.gz -C /usr/local/
[root@node1 elasticsearch-head-5.0.0]# pwd
/usr/local/elasticsearch-head-5.0.0
// 在安装elasticsearch-head之前先编译安装一个python3.6.8,如果有就不用安装
[root@node1 Python-3.6.8]# python3 --version
Python 3.6.8
[root@node1 opt]# tar -zxf Python-3.6.8.tgz -C /usr/local/
[root@node1 Python-3.6.8]# yum -y install zlib*
[root@node1 Modules]# pwd
/usr/local/Python-3.6.8/Modules
[root@node1 Modules]# vim Setup
366 zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz //取消注释
[root@node1 Python-3.6.8]# ./configure --prefix=/usr/local/python
[root@node1 Python-3.6.8]# make && make install
[root@node1 elasticsearch-head-5.0.0]# pwd
/usr/local/elasticsearch-head-5.0.0
[root@node1 elasticsearch-head-5.0.0]# yum -y install npm
[root@node1 elasticsearch-head-5.0.0]# npm install
[root@node1 elasticsearch-head-5.0.0]# npm audit fix
[root@node1 elasticsearch-head-5.0.0]# npm audit fix --force
[root@node1 elasticsearch-head-5.0.0]# nohup npm run start & // 后台启动,启动后按回车进入命令行界面
// 修改elasticsearch配置文件
[root@node1 config]# pwd
/usr/local/elasticsearch-8.1.0/config
[root@node1 config]# tail -2 elasticsearch.yml //在最后添加这两行内容
http.cors.enabled: true // 开启跨域访问支持,默认为false
http.cors.allow-origin: "*" // 跨域访问允许的域名地址
[root@node1 config]# systemctl restart elasticsearch.service //重启服务
// 优化之后的界面
8 安装logstash
[root@server opt]# tar -zxf logstash-8.1.0-linux-x86_64.tar.gz -C /usr/local/
[root@server bin]# pwd
/usr/local/logstash-8.1.0/bin
[root@server bin]# cat /etc/profile.d/logstash.sh
export PATH=/usr/local/logstash-8.1.0/bin:$PATH
[root@server bin]# source /etc/profile.d/logstash.sh
Logstash 命令常用选项:
- -f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
- -e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
- -t:测试配置文件是否正确,然后退出。