暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

原创|NO.A.0023|网络服务|——|ELK|elasticsearch|logstash|kibana|nginx|

Java BBS 2021-04-05
279

一、为什么用到ELK

  • 一般我们需要进行日志分析场景:直接在日志文件中grep/aw就可以获得自己想要的信息,但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档,文本搜索太慢怎么办,如何多维度查询,需要集中化的日志管理,所有服务器上的日志收集汇总,常见解决思路是建立集中式日志收集系统,将所有节点上的子让孩子统一收集,管理,访问。

  • 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时大部分情况下要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

  • 一个完整的集中式日志系统,需要包括以下几个主要特点:

  1. 收集——能够采集多种来源的日志数据

  2. 传输——能够采集多种来源的日志数据

  3. 存储——如何存储日志数据 

  4. 分析——可以支持UI分析

  5. 警告——能够提供错误报告,监控机制ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,目前主流的一种日志系统。

二、ELK简介

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

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

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

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

  • Filebeat隶属于Beats,目前Beats包含四种工具

  • Pachetbeat(搜集网络流量数据)

  • Topbeat(搜集系统,进程和文件系统界别CPU和内存使用情况等数据)

  • Filebeat(搜集文件数据)

  • Winlogbeat(搜集Windows事件日志数据)

三、实验部署

  • 本次部署的是filebeats(客户端),logstash+elasticsearch+kibana(服务端)组成的架构

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

1、实验环境

// 本次部署的单点ELK用了两台机器(Centos-7.5)
// ELK服务端:centos7.x 10.10.10.11 ELK-server
// Nginx客户端:centos7.x 10.10.10.12 Nginx-server

1、准备工作:

// 配置好网络yum源
[root@server11 yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@server11 yum.repos.d]# wget http://mirrors.aliyun.com/repo/epel-7.repo
// 关闭防火墙:systemctl stop(disable)firewalld
[root@server11 ~]# systemctl status firewalld.service
// 关闭selinux:SELINUX=disabled
[root@server11 ~]# getenforce
Disabled

2、下载并安装软件包

[root@server11 ~]# mkdir /elk
[root@server11 ~]# cd /elk
[root@server11 elk]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
[root@server11 elk]# wget https://artifacts.elastic.co^Cownloads/logstash/logstash-6.2.3.tar.gz
[root@server11 elk]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz
// 全部解压缩,并复制到/usr/local/目录下
[root@server11 elk]# tar -xf elasticsearch-6.2.3.tar.gz
[root@server11 elk]# tar -xf kibana-6.2.3-linux-x86_64.tar.gz
[root@server11 elk]# tar -xf logstash-6.2.3.tar.gz
[root@server11 elk]# cp -a elasticsearch-6.2.3 kibana-6.2.3-linux-x86_64 logstash-6.2.3 /usr/local/

3、安装JDK(java)环境工具

[root@server11 ~]# yum install -y java-1.8*

4、配置elasticsearch:

// 1、新建elasticsearch用户并启动(elasticsearch普通用户启动)
[root@server11 ~]# useradd elasticsearch
[root@server11 ~]# chown -R elasticsearch.elasticsearch /usr/local/elasticsearch-6.2.3/ #将这个用户的所有者改为elasticsearch目录
[root@server11 ~]# su - elasticsearch                    #以这个用户的身份进行启动部署
[elasticsearch@server11 ~]$ cd /usr/local/elasticsearch-6.2.3
[elasticsearch@server11 elasticsearch-6.2.3]$ ./bin/elasticsearch -d
// 2、查看进程是否启动成功(等待一下,不是立刻启动)
[elasticsearch@server11 elasticsearch-6.2.3]$ netstat -antp
tcp6 0 0 127.0.0.1:9200 :::* LISTEN 12133/java
// 3、若出现错误可以查看日志
[elasticsearch@server11 elasticsearch-6.2.3]$ cat /usr/local/elasticsearch-6.2.3/logs/elasticsearch.log
// 4、测试是否可以正常访问
[elasticsearch@server11 elasticsearch-6.2.3]$ curl localhost:9200 #只要看到这个界面说明部署成功
{
"name" : "XRgtD77",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "jPl_H0_FRIWo0CY-ureAuA",
"version" : {
"number" : "6.2.3",
"build_hash" : "c59ff00",
"build_date" : "2018-03-13T10:06:29.741383Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

5、配置logstash

// Logstash收集nginx日志之使用grok过滤插件解析日志,grok作为一个logstash的过滤插件,支持根据模式解析文本日志行,拆成字段
// 1、logstash中grok的正则匹配
[elasticsearch@server11 elasticsearch-6.2.3]$ exit
logout
[root@server11 ~]# cd /usr/local/logstash-6.2.3/
[root@server11 logstash-6.2.3]# vim vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns atterns
#Nginx log
WZ ([^ ]*)
NGINXACCESS %{IP:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent} %{QS:xforward}// 2、创建logstash配置文件
[root@server11 logstash-6.2.3]# vim /usr/local/logstash-6.2.3/default.conf
input {
beats {
port=> "5044"
}
}
#数据过滤
filter {
grok {
match => { "message" => "%/{NGINXACCESS}" }
}
geoip {
#nginx客户端IP
source => "10.10.10.12"
}
}
#输出配置为本机的9200端口,这是ElasticSerach服务的监听端口
output{
elasticsearch {
hosts => ["127.0.0.1:9200"]
}
}
// 3、进入到/usr/local/logstash-6.2.3目录下,并执行下列命令
// 后台启动logstash:nohup bin/logstash -f default.conf &
// 查看启动日志:tailf nohup.out
// 查看端口是否启动:netstat -napt|grep 5044
[root@server11 logstash-6.2.3]# nohup bin/logstash -f default.conf &
[1] 12384
[root@server11 logstash-6.2.3]# nohup: ignoring input and appending output to ‘nohup.out’ #自动执行
[root@server11 logstash-6.2.3]# tailf nohup.out
[2021-02-15T23:27:50,599][INFO ][logstash.inputs.beats ] Beats inputs: Starting input listener {:address=>"0.0.0.0:5044"}
[2021-02-15T23:27:50,699][INFO ][logstash.pipeline ] Pipeline started succesfully {:pipeline_id=>"main", :thread=>"#<Thread:0x35e626f run>"}
[2021-02-15T23:27:50,864][INFO ][org.logstash.beats.Server] Starting server on port: 5044
[2021-02-15T23:27:51,054][INFO ][logstash.agent ] Pipelines running {:count=>1, :pipelines=>["main"]}
[root@server11 logstash-6.2.3]# netstat -napt|grep 5044
tcp6 0 0 :::5044 :::* LISTEN 12384/java

6、配置kibana

// 1、打开Kibana配置文件/usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml,找到下面这行并修改
[root@server11 ~]# vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
server.host:"localhost"
// 修改为
server.host: "10.10.10.11"
// 这样其他电脑就能用浏览器访问Kibana的服务了;
// 2、进入Kibana的目录:
[root@server11 ~]# cd /usr/local/kibana-6.2.3-linux-x86_64/
// 执行启动命令:nohup bin/kibana &
// 查看启动日志:tail -f nohup.out 等于:tailf nohup.out
// 查看端口是否启动:netstat -antp |grep 5601
[root@server11 kibana-6.2.3-linux-x86_64]# nohup bin/kibana &
[2] 12537
[root@server11 kibana-6.2.3-linux-x86_64]# nohup: ignoring input and appending output to ‘nohup.out’ #系统自动执行


[root@server11 kibana-6.2.3-linux-x86_64]# netstat -antp |grep 5601
tcp 0 0 10.10.10.11:5601 0.0.0.0:* LISTEN 12537/bin/../node/b


// 3、测试:
// 在浏览器访问http://10.10.10.11:5601/app/kibana#/home?_g=()
// 到此,ELK部署完成

http://10.10.10.11:5601/app/kibana#/home?_g=()(Kibana默认界面)


7、nginx客户端配置

// 1、yum 安装二进制nginx软件包
[root@server11 ~]# yum install -y nginx
[root@server11 ~]# systemctl start nginx
[root@server11 ~]# systemctl enable nginx
#验证nginx是否配置成功http://10.10.10.11/
// 2、下载Filebeat并解压到/usr/local/
[root@server11 ~]# cd /elk/
[root@server11 elk]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.3-linux-x86_64.tar.gz
[root@server11 elk]# tar -xf filebeat-6.2.3-linux-x86_64.tar.gz -C /usr/local/
// 3、打开文件/usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml找到如下位置:修改三处
[root@server11 elk]# vim /usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml
enabled: true #修改为true
paths:
- /var/log/nginx/*.log #修改为/var/log/nginx/*.log
#output.elasticsearch: #将此行注释掉
# hosts: ["localhost:9200"]
output.logstash: #将此行注释掉
hosts: ["10.10.10.11:5044"] #取消此行注释并修改IP地址为ELK服务器地址
// 4、切换到/usr/local/filebeat-6.2.3-linux-x86_64目录下
cd /usr/local/filebeat-6.2.3-linux-x86_64
// 后台启动filebeat:nohup./filebeat -e -c filebeat.yml &
// 查看日志:tailf nohup.out
[root@server11 elk]# cd /usr/local/filebeat-6.2.3-linux-x86_64
[root@server11 filebeat-6.2.3-linux-x86_64]# nohup ./filebeat -e -c filebeat.yml &
[3] 13105
[root@server11 filebeat-6.2.3-linux-x86_64]# nohup: ignoring input and appending output to ‘nohup.out’ #指令自动执行
[root@server11 filebeat-6.2.3-linux-x86_64]# tailf nohup.out
me":212},"total":{"ticks":220,"time":224,"value":220},"user":{"ticks":10,"time":12}},"info":{"ephemeral_id":"5365e498-e87f-445d-8707-68d2784b0bea","uptime":{"ms":30128}},"memstats":{"gc_next":4856576,"memory_alloc":2888320,"memory_total":4500456,"rss":12713984}},"filebeat":{"events":{"added":8,"done":8},"harvester":{"open_files":2,"running":2,"started":2}},"libbeat":{"config":{"module":{"running":0},"reloads":1},"output":{"events":{"acked":6,"batches":1,"total":6},"read":{"bytes":6},"type":"logstash","write":{"bytes":788}},"pipeline":{"clients":1,"events":{"active":0,"filtered":2,"published":6,"retry":6,"total":8},"queue":{"acked":6}}},"registrar":{"states":{"current":2,"update":8},"writes":4},"system":{"cpu":{"cores":2},"load":{"1":0.02,"15":0.09,"5":0.05,"norm":{"1":0.01,"15":0.045,"5":0.025}}}}}}
// 5、通过浏览器多访问几次nginx服务,这样能多制造一些访问日志,访问地址:https://10.10.10.11
#下图
// 6、访问Kibana:https://10.10.10.11:5601,点击左上角的Discover,就可以看到访问日志已经被ELK搜集了,然后按照下列步骤完成设置
// #输入logstash-*, 点击"Next step"
// #选择Time Filter,再点击"Create index pattern"
// #然后可自行创建日志内容查询规则
#下图
#实际上就是:将logstash-*从filebeat接收过来的日志发送给了ELK

5、多刷新几次nginx,然后访问http://10.10.10.11:5601/app/kibana#/management/kibana/index?_g=():监控到日志

点击:Discover——>Index pattern:logstash-*——>Next step:@timestamp——>Create index pattern——>END

Discover——>右上角时间修改为15s——>可以查看到日志(说明ELK已经监控到了nginx服务的日志)——>END

——>search——>END

=================================END==================================

辅助文本

三、实验部署

1、实验环境

// 本次部署的单点ELK用了两台机器(Centos-7.5)
// ELK服务端:192.168.88.100
// Nginx客户端:192.168.88.110

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、下载并安装软件包

mkdir /elk
cd /elk
wget https://artifacts.elastic.com/downloads/elasticsearch/elasticseh-6.2.3.tar.gz
wget https://artifacts.elastic.com/downloads/logstash/logstash-6.2.3.tar.gz
wget https://artifacts.elastic.com/downloads/kibana-6.2.3-linux-x86.tar.gz
// 全部解压缩,并复制到/usr/local/目录下

3、安装JDK(java)环境工具

yum install -y java-1.8*

4、配置elasticsearch:

// 1、新建elasticsearch用户并启动(elasticsearch普通用户启动)
usearadd elasticsearch
chown -R elasticsearch.elasticsearch/usr/local/elasticsearch-6.2.3/
su -elasticsearch
cd /usr/local/elasticsearch-6.2.3
./bin/elasticsearch -d
// 2、查看进程是否启动成功(等待一下)
netstat -antp
// 3、若出现错误可以查看日志
cat /usr/local/elasticsearch-6.2.3/elasticsearch.log
// 4、测试是否可以正常访问
curl localhost:9200

5、配置logstash

// Logstash收集nginx日志之使用grok过滤插件解析日志,grok作为一个logstash的过滤插件,支持根据模式解析文本日志行,拆成字段
// 1、logstash中grok的正则匹配
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}
// 2、创建logstash配置文件
vim /usr/local/logstash-6.2.3/default.conf
input {
beats{
port=>"5044"
}
}
#数据过滤
filter{
grok{
match=>{"message"=>"/{NGINXACCESS}"}
}
geoip{
#nginx客户端IP
source=>"192.168.88.110"
}
}
#输出配置为本机的9200端口,这是ElasticSerach服务的监听端口
output{
elasticsearch{
hosts=>["127.0.0.1:9200"]
}
}
// 3、进入到/usr/local/logstash-6.2.3目录下,并执行下列命令
// 后台启动logstash:nohup bin/logstash -f default.conf &
// 查看启动日志:tailf nohup.out
// 查看端口是否启动:netstat -napt|grep 5044

6、配置kibana

// 1、打开Kibana配置文件/usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml,找到下面这行并修改
vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
server.host:"localhost"
// 修改为
server.host:"192.168.88.100"
// 这样其他电脑就能用浏览器访问Kibana的服务了;
// 2、进入Kibana的目录:
cd /usr/local/kibana-6.2.3-linux-x86_64
// 执行启动命令:nohup bin/kibana &
// 查看启动日志:tail -f nohup.out
// 查看端口是否启动:netstat -antp |grep 5601
// 3、测试:
// 在浏览器访问192.168.88.100:5601
// 到此,ELK部署完成

7、nginx客户端配置

// 1、yum 安装二进制nginx软件包
yum install -y nginx
// 2、下载Filebeat并解压到/usr/local/
wget https://artifacts.elastic.com/downloads.beats/filebeat/filebeat-6.2.3-linux-x86_64.tar.gz
tar -xf ./filebeat-6.2.3-linux-x86_64.tar.gz -C /usr/local/
// 3、打开文件/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:["192.168.88.100:5044"] #取消此行注释并修改IP地址为ELK服务器地址
// 4、切换到/usr/local/filebeat-6.2.3-linux-x86_64目录下
cd /usr/local/filebeat-6.2.3-linux-x86_64
// 后台启动filebeat:nohup./filebeat -e -c filebeat.yml &
// 查看日志:tailf nohup.out
// 5、通过浏览器多访问几次nginx服务,这样能多制造一些访问日志,访问地址:https://192.168.137.131
// 6、访问Kibana:https://192.168.88.100:5601,点击左上角的Discover,就可以看到访问日志已经被ELK搜集了,然后按照下列步骤完成设置
// #输入logstash-*, 点击"Next step"
// #选择Time Filter,再点击"Create index pattern"
// #然后可自行创建日志内容查询规则

END





声明:JavaBBS论坛主要用于IT技术专题的交流学习,为开源技术爱好者提供广泛、权威的技术资料。若您在技术专题有更好的想法或者建议,欢迎交流!!!



推荐阅读

Recommended reading

 







JavaBBS



Git











  






https://www.javabbs.cn/git






  JavaBBS大数据






→ 






https://www.javabbs.cn





/dsj





  JavaBBS云存储






→  https://www.javabbs.cn






/ycc







  JavaBBS数据库













  https://www.javabbs.cn






/sjk







  JavaBBS云计算













  https://www.javabbs.cn






/yjs







  JavaBBSIT.Log













https://www.javabbs.cn






/itl






  JavaBBSNginx













  https://www.javabbs.cn






/ngx






  JavaBBSzabbix













https://www.javabbs.cn






/zbx






  JavaBBSJavaSE













https://www.javabbs.cn






/jse







  JavaBBS社区文章













https://www.javabbs.cn






/bwz






  JavaBBS社区资料













https://www.javabbs.cn






/bzl







文章转载自Java BBS,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论