且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ELK日志分析服务搭建

更新时间:2022-05-07 20:12:25

一、ELK简介

ELK是三个开源软件的缩写,分别是:Elasticsearch , Logstash, Kibana , 新增了一个 FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。

1.Elasticsearch 是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。

2.Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为 c/s 架构,client 端安装在需要收集日志的主机上,server 端负责将收到的各节点日志进行过滤、修改等操作在一并发往 elasticsearch 上去。

3.Kibana 也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

4.Filebeat 隶属于 Beats。目前 Beats 包含四种工具:

Packetbeat #搜集网络流量数据
Topbeat    #搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据
Filebeat   #搜集文件数据
Winlogbeat #搜集 Windows 事件日志数据 

ELK日志分析服务搭建

二、实验部署

ELK日志分析服务搭建

业务请求到达nginx;nginx响应请求,并在access.log文件中增加访问记录;
FileBeat搜集新增的日志,通过LogStash的5044端口上传日志;
LogStash将日志信息通过本机9200端口传到Elasticsearch;
搜索日志的用户通过浏览器访问Kibana,服务器端口是5601
Kibana通过9200端口访问Elasticsearch。

1.实验环境准备
单节点ELK:elk服务端:10.0.0.201;nginx客户端:10.0.0.202

(1)配置yum源(两台机器)

wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
#关闭防火墙:systemctl stop(disable) firewalld
#关闭 SELinux:SELINUX=disabled

2.ELK-server服务端部署
(1)安装软件

#创建软件存放目录,并将elk-server.zip压缩包上传
mkdir /elk;cd /elk
#解压缩,并拷贝到/usr/local/目录下
tar -xf elasticsearch-6.2.3.tar.gz
tar -xf logstash-6.2.3.tar.gz 
tar -xf kibana-6.2.3-linux-x86_64.tar.gz
cp -a elasticsearch-6.2.3 logstash-6.2.3 kibana-6.2.3-linux-x86_64 /usr/local
tar -xf jdk-8u261-linux-x64.tar.gz
#cp -a jdk1.8.0_261 /usr/local/jdk1.8

(2)安装jdk

#安装gcc
yum -y install gcc

#配置jdk的环境变量
#vim /etc/profile
#添加:
export JAVA_HOME=/usr/local/jdk1.8
export JAVA_BIN=/usr/local/jdk1.8/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#source /etc/profile

(3)配置Elasticsearch

#新建elasticsearch用户并使用该启动启动
useradd elasticsearch
chown -R elasticsearch.elasticsearch /usr/local/elasticsearch-6.2.3/
su - elasticsearch
$ cd /usr/local/elasticsearch-6.2.3/
$ ./bin/elasticsearch -d
#查看进程是否启动成功,需要等待几分钟
netstat -anpt|grep :9200

ELK日志分析服务搭建

(4)配置logstash
Logstash 收集 nginx 日志之使用 grok 过滤插件解析日志,grok 作为一个 logstash 的过滤插件,支持根据模式解析文本日志行,拆成字段。

grok的正则匹配

#cd /usr/local/logstash-6.2.3/
vim vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
#添加:
WZ ([^ ]*)
NGINXACCESS %{IP:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{WZ:request}
HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent}
%{QS:xforward}

创建logstash配置文件

#vim /usr/local/logstash-6.2.3/default.conf
input {
    beats {
        port => "5044"
    }
}
#数据过滤
filter {
    grok {
        match => { "message" => "%{NGINXACCESS}" }
     }
    geoip {
       #nginx 客户端 ip
       source => "10.0.0.202"
     }
}
#输出配置为本机的 9200 端口,这是 ElasticSerach 服务的监听端口
output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
    }
}
#进入/usr/local/logstash-6.2.3目录下
#后台启动logstash:
nohup bin/logstash -f default.conf &
#查看启动日志
tail -f nohup.out
#如果报错“Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f5550000, 178978816, 0) failed; error='Cannot allocate memory' (errno=12)”
#原因:服务器内存不够;解决办法:vim config/jvm.options
#将-Xms1g和-Xmx1g改为:
-Xms256m
-Xmx256m

(5)配置kibana

#编辑配置文件
vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
#修改: #server.host: "localhost" 为 server.host: "本机IP"

#进入kibana目录
cd /usr/local/kibana-6.2.3-linux-x86_64/
#启动并测试:
nohup bin/kibana &
#浏览器访问:
10.0.0.201:5601

ELK日志分析服务搭建

3.Nginx客户端配置

#安装依赖
yum install -y gcc* pcre-devel opensll openssl-devel zlib-devel ncurses-devel cmake bison libxml2-devel libpng-devel

#将源码包上传到nginx主机上,并创建nginx用户
useradd -r -s /sbin/nologin nginx
#解压nginx并安装
#cd nginx-1.17.10/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

#上传filebeat软件包并解压到/usr/local

#编辑配置文件
vim /usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml
#修改:
enable:false #修改为 true
paths:/var/log/*.log #修改为/var/log/nginx/*.log
#output.elasticsearch: #将此行注释掉
#hosts: ["localhost:9200"] #将此行注释掉
output.logstash: #取消此行注释
hosts: ["10.0.0.201:5044"] #取消此行注释并修改 IP 地址为 ELK 服务器地址

#切换到/usr/local/ filebeat-6.2.3-linux-x86_64目录下
cd /usr/local/filebeat-6.2.3-linux-x86_64
#启动:
nohup ./filebeat -e -c filebeat.yml &
#查看日志:
tail -f nohup.out

#验证:多访问几次nginx,然后访问kibana进行设置
#步骤:
    #点击左上角的Discoverwe 
    #输入 logstash-*,点击next step
    #选择 time filter,再点击 create index pattern(创建索引模式)