- ELK日志分析系统简介
-
- ELK日志分析系统的组成部分:
- 日志处理步骤
- Elasticsearch介绍
-
- Elastcsearch概述
- Elasticsearch的核心概念
- Logstash介绍
-
- 概述
- 相关组件
- LogStash主机分类:
- Kibana介绍
-
- 概述
- Kibana的主要功能
- 部署ELK日志分析系统的拓扑图
- 一、部署Elasticsearch群集节点
-
- 1、安装Elasticsearch软件
-
- 1.2)查看Java环境,需要java支持(三台机都查看)
- 1.3)两节点安装Elasticsearch相关软件包
- 1.4)修改ES配置文件
- 1.5)创建数据目录,并改变属性,启动Elasticsearch
- 2、进行ES访问测试(安装head图像化展示插件前)
-
- 2.1)查看节点信息
- 2.2)查看集群节点状态信息 http://192.168.10.20:9200/_cluster/state?pretty
- 3、节点安装elasticsearch-head插件,图形化展示
-
- 3.1)首先安装node组件依赖包
- 3.2)安装phantomjs前端框架
- 3.3)安装elasticsearch-head,数据的可视化工具
- 3.4)修改ES配置文件
- 3.5)启动elasticsearch-head可视化工具
- 4、访问elasticsearch测试(可视化展示数据)
- 二、部署Logstash日志采集器
-
- 1.安装logstash软件,并启动
- 2.利用logstash命令输入数据,测试ES接收情况
-
- 2.1)试验logstash命令
- 2.2)将logstash的信息输出到Elasticsearch(ES)中
- 2.3)访问ES验证对接情况Elasticsearch 192.168.10.10:9100(在生产环境中一般都是访问Keepalived的VIP地址)
- 3.利用Logstash收集系统日志测试ES对接状况
-
- 3.1)配置logstash采集系统日志的配置文件
- 3.2)检查配置并重启logstash服务
- 3.3)访问ES验证 192.168.10.10:9100
- 4.安装Apache服务,供logstash采集日志
-
- 4.1)安装Apache
- 4.2)访问Apache测试
- 4.3)配置Apache日志采集配置
- 4.4)访问ES 192.168.10.10:9100 验证
- 三、部署Kibana(因为是实验环境,就直接装在node1节点上了)
-
- 1.安装Kibana
- 2.配置Kibana配置文件
- 3.访问Kibana 192.168.10.10:5601
ELK日志分析系统简介
ELK日志分析系统的组成部分:
- Elasticsearch
- Logstash
- Kibana
日志处理步骤
- 将日志进行集中化管理
- 将日志格式化(Logstash)并输出到Elasticsearch
- 对格式化后的数据进行索引和存储(Elasticsearch)
- 前端数据的展示(Kibana)
Elasticsearch介绍
Elastcsearch概述
提供了一个分布式多功能的搜索引擎
Elasticsearch的核心概念
- 接近实时 :响应速度非常的快,从索引一个文档直到能够被搜索到只有一个轻微的延迟(通常是1s)
- 集群 :群集就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能。
- 节点 :是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。
- 索引:类似于关系型数据库中的“库”,当索引一个文档后,就可以使用elasticsearch搜索到该文档,也可以简单地将索引理解为存储数据库的地方,可以方便地进行全文索引。
●索引(库)→>类型(表)→>文档(记录)· - 分片和副本:集群索引中可能由多个分片构成,并且每个分片可以拥有多个副本,将一个单独的索引分为多个分片,可以处理不能在单一服务器上运行的大型索引.
Logstash介绍
概述
- 一款强大的数据处理工具
- 可实现数据传输、格式处理、格式化输出
- 数据输入、数据加工(如过滤,改写等)以及数据输出
相关组件
-
Shipper:日志收集者 。
负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。
通常,远程代理端(agent)只需要运行这个组件即可; -
Indexer:日志存储者。
负责接收日志并写入到本地文件。 -
Broker:日志Hub。
负责连接多个Shipper和多个Indexer -
Search and Storage:允许对事件进行搜索和存储;
-
Web Interface:基于Web的展示界面
LogStash主机分类:
-
代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序;
-
中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储
Kibana介绍
概述
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。
- 一个针对Elasticsearch的开源分析及可视化平台
- 搜索、查看存储在Elasticsearch索引中的数据
- 通过各种图表进行高级数据分析及展示
Kibana的主要功能
- Elasticsearch无缝之集成
- 整合数据,复杂数据分析
- 让更多团队成员受益
- 接口灵活,分享更容易
- 配置简单,可视化多数据源
- 简单数据导出
部署ELK日志分析系统的拓扑图
一、部署Elasticsearch群集节点
1、安装Elasticsearch软件
注:两个节点配置,除了主机名和节点号,其余配置完全相同。
### 1.1)给两台节点设置主机名,并做主机映射(以其中一台为例)
[root@promote ~]# hostnamectl set-hostname node1
[root@promote ~]# su
[root@node1 ~]# vi /etc/hosts
192.168.10.10 node1
192.168.10.20 node2
1.2)查看Java环境,需要java支持(三台机都查看)
[root@node1 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
1.3)两节点安装Elasticsearch相关软件包
[root@node1 ~]# ls ##查看rpm包
…… elasticsearch-5.5.0.rpm
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm ##rpm安装
[root@node1 ~]# systemctl daemon-reload ##重载系统参数
[root@node1 ~]# systemctl enable elasticsearch.service ##开机自启
1.4)修改ES配置文件
[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml-bak ##带属性备份配置文件
[root@node1 elasticsearch]# vim elasticsearch.yml
'17行//' cluster.name: my-elk-cluster ##群集名称,自定义,但要保持两个节点相同
'23行//' node.name: node1 ##节点名称,节点间唯一有区别的地方,不能相同
'33行//' path.data: /data/elk_data ##数据存放位置,需要手动创建
'37行//' path.logs: /var/log/elasticsearch/ ##日志存放位置,安装时自动建好了
'43行//' bootstrap.memory_lock: false
##内存加固,true表示允许将溢出的内存保存到swap缓存中,false则表示不允许
'55行//' network.host: 0.0.0.0 ##监听地址,写任意网段
'59行//' http.port: 9200 ##开启9200端口
'68行//' discovery.zen.ping.unicast.hosts: ["node1", "node2"] ##群集内部通讯使用的是非广播包的形式,”[ ]”内写节点名称
[root@node1 elasticsearch]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
##可以反向过滤出我们配置的信息,默认文件内所有信息都被注释掉了
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
1.5)创建数据目录,并改变属性,启动Elasticsearch
[root@node1 ~]# mkdir -p /data/elk_data ##创建数据存放目录
[root@node1 ~]# id elasticsearch ##安装时,系统自动创建了elasticsearch用户,可以使用id命令查看
uid=990(elasticsearch) gid=985(elasticsearch) groups=985(elasticsearch)
[root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data ##改变属性
[root@node1 elasticsearch]# systemctl start elasticsearch ##启动elasticsearch服务
[root@node1 elasticsearch]# netstat -anupt |grep 9200 ##启动较慢,可能要等几秒
tcp6 0 0 :::9200 :::* LISTEN 38188/java
2、进行ES访问测试(安装head图像化展示插件前)
2.1)查看节点信息
2.2)查看集群节点状态信息 http://192.168.10.20:9200/_cluster/state?pretty
3、节点安装elasticsearch-head插件,图形化展示
3.1)首先安装node组件依赖包
[root@node1 elasticsearch]# yum -y install gcc gcc-c++ make
[root@node2 ~]# ls
node-v8.2.1.tar.gz
……省略部分
[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz ##解压
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure ##直接配置
[root@node1 node-v8.2.1]# make -j3 && make install ##编译安装,建议使用-j,否则较慢
3.2)安装phantomjs前端框架
[root@node1 ~]# ls
……省略部分
phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/bin/ ##/bin目录下有执行脚本
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/
3.3)安装elasticsearch-head,数据的可视化工具
[root@node1 ~]# ls
……省略部分
elasticsearch-head.tar.gz
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install ##npm是一种前端工具
3.4)修改ES配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enable: true ##在末尾插入这两行,自动开启
http.cors.allow-origin: "*" ##允许任意域名访问
[root@node1 ~]# systemctl restart elasticsearch.service
3.5)启动elasticsearch-head可视化工具
elasticsearch-head是java开发的,需要npm方式启动
[root@node1 ~]# cd /root/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start & ##使用npm后台启动
[root@node1 elasticsearch-head]# netstat -lnuapt |grep 9100 ##查看端口状态
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 84888/grunt
4、访问elasticsearch测试(可视化展示数据)
注:外部直接访问ES的端口是9200,访问ES-head的端口是9100,登入ES-head后再访问9200端口,看访问可视化数据
使用下面命令插入数据测试
[root@node2 elasticsearch-head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
##插入数据测试
二、部署Logstash日志采集器
1.安装logstash软件,并启动
[root@logstash ~]# ls ##查看相关软件包
……省略部分
logstash-5.5.1.rpm
[root@logstash ~]# rpm -ivh logstash-5.5.1.rpm ##安装Logstash软件包
[root@logstash ~]# rpm -qc logstash ##查看logstash配置文件位置
/etc/logstash/jvm.options
/etc/logstash/logstash.yml
/etc/logstash/startup.options
[root@logstash ~]# systemctl start logstash.service ##开启logstash日志收集器
[root@logstash ~]# systemctl enable logstash.service ##开机自启
[root@logstash ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##建立软连接
2.利用logstash命令输入数据,测试ES接收情况
############################################################################################
logstash (Apache)与elasticsearch (node)功能是否正常,做对接测试
Logstash这个命令测试
字段描述解释:
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
-t:测试配置文件是否正确,然后退出
标准输出中加入”codec=>rubydebug”字段,可以转换输出格式,转换成详细格式
##############################################################################################
2.1)试验logstash命令
[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{} }' ##会进入一个交互模式
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
####上面的报错是因为没有开启java的log4j日志没开启,不影响本实验
……省略部分
12:02:00.759 [[main]-pipeline-manager] INFO logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
12:02:00.936 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint { :port=>9600} ##提供了9600端口
www.kgc.com ##输入信息
2020-10-29T04:02:14.709Z logstash www.kgc.com ##这里会自动输出你输入的内容
[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
####标准输出中加入”codec=>rubydebug”字段,可以转换输出格式,转换成详细格式 ,由此可以看出Logstash具有格式转换功能
……省略部分
12:15:54.510 [[main]-pipeline-manager] INFO logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
12:15:54.642 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint { :port=>9600}
www.51xit.com ##输入信息后,下方输出详细数据
{
"@timestamp" => 2020-10-29T04:18:32.295Z,
"@version" => "1",
"host" => "logstash",
"message" => "www.51xit.com"
}
2.2)将logstash的信息输出到Elasticsearch(ES)中
[root@logstash ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.10:9200"] } }'
……省略部分
13:23:21.475 [[main]-pipeline-manager] INFO logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
13:23:21.568 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint { :port=>9600}
##提示成功开启了logstash的接口,接下来就可以输入数据到ES中显示了
www.baidu.com ##插入数据
2.3)访问ES验证对接情况Elasticsearch 192.168.10.10:9100(在生产环境中一般都是访问Keepalived的VIP地址)
##################################################################
Logstash配置文件主要有三个部分组成,input、output、filter(过滤器)组成
Logstash收集的日志信息被设置标签(type),filter再利用标签进行分类。
#################################################################
3.利用Logstash收集系统日志测试ES对接状况
3.1)配置logstash采集系统日志的配置文件
[root@logstash ~]# chmod o+r /var/log/messages ##授予系统日志给其他用户读取的权限
[root@logstash ~]# cd /etc/logstash/conf.d/ ##进入/etc/logstash/conf.d/下创建配置文件
[root@logstash conf.d]# vi system.conf ##编写配置,可以编写多个,每个采集一大类日志,配置文件名称自定义,但是必须要以 .conf 结尾
input {
file{ ##输入点是文件
path => "/var/log/messages" ##采集的文件位置
type => "system" ##设置标签
start_position => "beginning" ##采集开始位置,从开头开始
}
}
output {
elasticsearch{ ## 输出点是ES
hosts => ["192.168.10.10:9200"] ##ES的主机地址及端口,生产环境用的是VIP地址,而不是单个节点地址
index => "system-%{+YYYY.MM.dd}" ##ES索引的形式,‘-年月日’的形式
}
}
3.2)检查配置并重启logstash服务
[root@logstash conf.d]# logstash -f /etc/logstash/conf.d/system.conf -t ##检查配置文件是否真确
……省略部分
Configuration OK ##配置OK,没问题
13:57:43.260 [LogStash::Runner] INFO logstash.runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
[root@logstash conf.d]# systemctl restart logstash.service ##重启Logstash
3.3)访问ES验证 192.168.10.10:9100
4.安装Apache服务,供logstash采集日志
4.1)安装Apache
[root@logstash ~]# yum -y install httpd
[root@logstash ~]# cd /etc/logstash/conf.d
[root@logstash ~]# systemctl start httpd.service ##启动Apache服务
[root@logstash ~]# ls /var/log/httpd/ ##查看日志目录,有两个日志文件
access_log error_log
4.2)访问Apache测试
4.3)配置Apache日志采集配置
[root@logstash conf.d]# vim Apache-log.conf ##编写Apache日志收集的配置
input {
file{
path => "/var/log/httpd/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/var/log/httpd/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" { ##判断匹配access标签
elasticsearch{
hosts => ["192.168.10.10:9200"]
index => "Apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" { ##判断匹配error标签
elasticsearch{
hosts => ["192.168.10.10:9200"]
index => "Apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@logstash ~]# logstash -f /etc/logstash/conf.d/Apache-log.conf -t ##检查配置
……省略部分
Configuration OK ##配置OK没问题
14:41:31.909 [LogStash::Runner] INFO logstash.runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
[root@logstash ~]# logstash -f /etc/logstash/conf.d/Apache-log.conf ##重启配置
4.4)访问ES 192.168.10.10:9100 验证
三、部署Kibana(因为是实验环境,就直接装在node1节点上了)
1.安装Kibana
[root@node1 ~]# cd /usr/local/src/ ##Kibana的rpm包直接放在了src/目录下
[root@node1 src]# ls ##查看软件包
kibana-5.5.1-x86_64.rpm
[root@node1 src]# rpm -ihv kibana-5.5.1-x86_64.rpm ##直接安装
2.配置Kibana配置文件
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp -p kibana.yml kibana.yml.bak ##保留属性备份配置文件
[root@node1 kibana]# vim kibana.yml
2 行// server.port: 5601 ##开启5601端口
7 行// server.host: "0.0.0.0" ##设置监听主机地址为0.0.0.0,任意地址
21行// elasticsearch.url: "http://192.168.10.10:9200" ##指定ES的访问地址,真是环境为VIP地址
30行// kibana.index: ".kibana" ##开启Kibana索引
[root@node1 kibana]# systemctl restart kibana.service ##重启Kibana服务
3.访问Kibana 192.168.10.10:5601