ELK实时日志分析平台环境部署
一、ELK的概念与原理
1、ELK的组成
ELK 是由 ElasticSearch、Logstash和Kibana 三个开源工具组成。
1)ElasticSearc 是一个基于Lucene的开源分布式搜索服务器。特点是:分布式,零配置,自动发现,索引自动分片,索引副本机制,RESTful风格接口,多数据源,自动搜索负载。
2)Logstash 是一个完全的开源工具,他可以对你的日志进行收集、过滤、分析、支持大量的数据获取方法,并将其存取供以后使用。
3)Kibana 是一个基于浏览器页面的Elasticsearch 前端展示工具,也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch 提供的日志分析友好的Web界面,可以帮助您汇总,分析和搜索重要数据日志。
2、ELK的特点
- 收集- 能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 存储-如何存储日志数据
- 分析-可以支持UI 分析
- 警告-能够提供错误报告,监控机制
ELK 提供了一整套解决方案,并且很多都是开源软件,是目前主流的一种日志系统。
3、ELK 的工作原理
①Logstash 收集AppServer 产生的log,并存放到ElasticSearch 群集中,而 Kibana则从 ES 集群中查询数据生成图表,在返回给Browser。
②Logstash事件处理有三个阶段:inputs→filters→outputs。是一个接收,处理,转发日志的工具。
③Input:输入数据到logstash
④Filters:数据中间处理,对数据进行操作
⑤Outputs:outputs是 logstash 处理管道最末端组件
⑥Codecs:codecs 是基于数据流的过滤器,可以作为input,output的一部分配置。
二、ELK环境部署
三台 Centos 7
1、主机名:elkc1.sw.org
IP地址:172.16.12.101
2、主机名:elkc2.sw.org
IP地址:172.16.12.102
3、主机名:apache
IP地址:172.16.12.99
前面俩台主机需要做的部署:
修改主机名 nmcli general hostname
增加本机dns 记录 vim /etc/hosts
vim /etc/selinux/config SELINUX=disabled
setenforce 0 #关闭防火墙
vim /etc/security/limits.conf 修改系统限制,在最后一行添加下面内容
* soft nofile 65535
* hard nofile 131072
* soft nproc 4096
* hard nproc 8192
* soft memlock unlimited
* hard memlock unlimited
然后 reboot 重启系统。
部署 elasticseatrch
1、安装 JAVA 包 ,配置java 环境。(要求java 环境必须是1.8版本以上)
tar 解包
mv jdk1.8.0_161/ /usr/local/jdk1.8.0 移动包、
vim /etc/profile 添加JAVA需要的环境
export JAVA_HOME=/usr/local/jdk1.8.0
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile 重启文件
java -version 查看配置是否成功,不显示 open 即可。
2、安装 elasticsearch
1)安装包 copy 到虚拟机中 进行解压
[root@elkc1 ~]# rpm -ivh elasticsearch-7.6.0-x86_64.rpm
[root@elkc1 ~]# mkdir -p /var/es-data
[root@elkc1 ~]# chown -R elasticsearch:elasticsearch /var/es-data
[root@elkc1 ~]# chown -R elasticsearch:elasticsearch /var/log/elasticsearch/
修改属主和属组以及日志的属组属主
2)修改 elasticsearch 的配置文件
[root@elkc1 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: myelk #设置集群名称
node.name: elkc1 #设置节点名称
node.master:ture #主节点
node.data:ture #数据节点
path.data: /var/es-data #data存放的路径
path.logs: /var/log/elasticsearch #logs日志的路径
bootstrap.memory_lock: ture #配置内存使用交换分区
network.host: 0.0.0.0 #监听的网络地址
http.port: 9200 #开启监听的端口
cluster.initial_master_nodes: ["elk-n1"] #集群初始主节点
discovery.zen.ping.unicast.hosts: ["elk-n1" , "elk-n2"] #节点单播通信
http.cors.enabled: true #此下两条为新增加的参数
http.cors.allow-origin: "*" #使head插件可以访问ES
这里需要关闭防火墙:systemctl stop firewalld
3)修改elasticsearch的Service配置文件
[root@elkc1 ~]# vim /usr/lib/systemd/system/elasticsearch.service
# Specifies the maximum file size
LimitFSIZE=infinity
LimitMEMLOCK=infinity #添加这一行即可
4)启动elasticsearch
[root@elkc1 ~]# systemctl daemon-reload
[root@elkc1 ~]# systemctl start elasticsearch.service
3、部署 第二台的 elasticseatrch
从 配置JAVA 开始 到访问 9200 端口 看到内容即可。
配置文件可以用:
[root@elkc2 ~]# scp root@172.16.12.101:/etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
在elkc1 主机上安装Head 插件
#安装EPEL源
[root@elkc1 ~]# yum -y install epel-release
安装phantomjs
[root@elkc1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 #解包
[root@elkc1 ~]# mv phantomjs-2.1.1-linux-x86_64 /usr/local/phantomjs #位移
[root@elkc1 ~]# ln -s /usr/local/phantomjs/bin/phantomjs /usr/bin #软链接
[root@elkc1 ~]# phantomjs --version #测试
2.1.1
安装 Head 的插件,head 插件本质上是一个nodejs工程,因此需要安装node,使用npm来安装依赖的包。
[root@elkc1 ~]# tar zxvf node-v13.8.0-linux-x64.tar.gz
[root@elkc1 ~]# mv node-v13.8.0-linux-x64/ /usr/local/node13.8
[root@elkc1 ~]# vim /etc/profile
export NODE_HOME=/usr/local/node13.8 #添加这俩行 即可
export PATH=$PATH:$NODE_HOME/bin
[root@elkc1 ~]# source /etc/profile #启动文件
安装git,下载Head插件
[root@elkc1 ~]# yum -y install git
[root@elkc1 ~]# git clone http://github.com/mobz/elasticsearch-head.git
#这里报错了,使用压缩包 即可。
[root@elkc1 ~]# unzip elasticsearch-head.zip
[root@elkc1 ~]# mv elasticsearch-head /opt/
[root@elkc1 ~]# cd /opt/elasticsearch-head/ #修改配置文件
[root@elkc1 elasticsearch-head]# vim Gruntfile.js #修改IP地址 即可
[root@elkc1 elasticsearch-head]# vim _site/app.js
查找:9200 #快速的找到需要修改的选项
[root@elkc1 elasticsearch-head]# ./node_modules/grunt/bin/grunt server &
#启动服务,使用浏览器访问:172.16.12.101:9100 #成功即可
目前的情况是已经开始工作了,但是没有接受任何的日志,所以接下来我们安装需要采集的日志。
安装Logstash
1)安装 logstash 包
[root@elkc1 ~]# rpm -ivh logstash-7.6.0.rpm #解压log 包
[root@elkc1 ~]# ln -s /etc/logstash /usr/share/logstash/config #创建软链接
[root@elkc1 ~]# vim /etc/logstash/logstash.yml #修改配置文件
这里添加文件路径 即可。
保存退出,进行见简单测试
[root@elkc1 ~]# /usr/share/logstash/bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
只要能正常工作即可。
2)日志采集配置
[root@elkc1 ~]# chmod a+r /var/log/messages #赋权
[root@elkc1 ~]# vim /etc/logstash/conf.d/system.conf #创建一个配置文件,将下面内容添加进去
input {
file {
path => "/var/log/messages"
type => "system
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["172.16.12.100:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@elkc1 ~]# systemctl enable elasticsearch.service #设置开机启动
[root@elkc1 ~]# systemctl start logstash #启动日志收集
安装Kibana
[root@elkc1 ~]# rpm -ivh kibana-7.6.0-x86_64.rpm #解压包
[root@elkc1 ~]# vim /etc/kibana/kibana.yml #修改下面四个选项,都可以搜索到
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"
[root@elkc1 ~]# systemctl start kibana #开机启动
[root@elkc1 ~]# systemctl status kibana #当前启动
使用浏览器访问 http://172.16.12.101:5601 即可看到kibana。
这里就可以看到日志了。
安装Filebeat
[root@elkc1 ~]# rpm -ivh filebeat-7.6.0-x86_64.rpm #解包
[root@elkc1 ~]# vim /etc/filebeat/filebeat.yml
1、output.elasticsearch:
# Array of hosts to connect to.
hosts: ["127.0.0.1:9200"] #看这里
一共俩条需要修改
2、setup.kibana:
host: "localhost:5601" #还有这里
[root@elkc1 ~]# filebeat modules enable elasticsearch
[root@elkc1 ~]# filebeat setup
这里比较慢,耐心等待。
[root@elkc1 ~]# systemctl start filebeat.service #启动filebeat
到这里就结束了,接下来给其他俩台机器 部署 JAVA 环境、安装apache和Logstash即可。
第二台机器的JAVA 环境和apache服务已经部署了,把Logstash 装一下就🆗了。
第三台机器的需要部署 JAVA 环境、安装apache和Logstash就可以了。