文章目录
- 一、ELK 日志分析系统简介
- 1.1、ELK 日志分析系统概述
- 1.2、日志处理步骤
- 1.3、ElasticSearch 介绍
- 1.4、Logstash 介绍
- 1.5、Kiabana 介绍
- 二、实验系统搭建
- 2.1、实验环境
- 2.2、配置Elasticsearch 环境
- 2.3、node1 和node2 安装elasticsearch-head 插件
- 2.4、apache 服务器部署logstash
- 2.5、node2 主机安装kibana
- 2.6、对接Apache主机的Apache 日志文件
一、ELK 日志分析系统简介
1.1、ELK 日志分析系统概述
ELK日志分析系统是Logstash、Elasticsearch、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示。
1.2、日志处理步骤
1.将日志进行集中化管理
2.将日志格式化(Logstash)并输出到Elasticsearch
3.对格式化后的数据进行索引和存储(Elasticsearch)
4.前端数据的展示(Kibana)
1.3、ElasticSearch 介绍
Elasticsearch是用Java开发的,提供了一个分布式多用户能力的全文搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Elasticsearch的基础核心概念:
(1)接近实时(NRT)
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
(2)集群(cluster)
集群包含多个节点,每个节点属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常、
(3)节点(node)
集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操作的时候),默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群。
(4)索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
索引相对于关系型数据库的库。
(5)索引(index)
ElasticSearch将它的数据存储在一个或多个索引(index)中。用SQL领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch内部使用Lucene将数据写入索引或从索引中检索数据。
(6)文档(document)
文档(document)是ElasticSearch中的主要实体。对所有使用ElasticSearch的案例来说,他们最终都可以归结为对文档的搜索。文档由字段构成。
(7)分片(shards)
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。5.X默认不能通过配置文件定义分片
(8)副本(replicas)
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
1.4、Logstash 介绍
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、格式处理、格式化输出,并将其存储,供以后使用(如,搜索)。
Logstash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在Java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),LogStash可配置单一的代理端(agent)与其它开源软件结合,以实现不同的功能。
Logstash的理念很简单,它只做3件事情:
Collect:数据输入
Enrich:数据加工,如过滤,改写等
Transport:数据输出
(1)LogStash的主要组件:
Shipper:日志收集者 。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可;
Indexer:日志存储者。负责接收日志并写入到本地文件。
Broker:日志Hub。负责连接多个Shipper和多个Indexer
Search and Storage:允许对事件进行搜索和存储;
Web Interface:基于Web的展示界面
正是由于以上组件在LogStash架构中可独立部署,才提供了更好的集群扩展性
(2)LogStash主机分类:
代理主机(agent host):作为事件的传递者(shipper),将各种日志数据发送至中心主机;只需运行Logstash 代理(agent)程序;
中心主机(central host):可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个组件,以实现对日志数据的接收、处理和存储
1.5、Kiabana 介绍
Kibana是一个针对Elasticsearch的开源分析及可视化平台
搜索、查看交互存储在Elasticsearch索引中的数据
可以通过各种图表进行高级数据分析及展示
Kiabana主要功能:
Elasticsearch无缝之集成
整合数据,复杂数据分析
让更多团队成员受益
接口灵活,分享更容易
配置简单,可视化多数据源
简单数据导出
二、实验系统搭建
2.1、实验环境
VMware虚拟机
一台centos7.4虚拟机,IP地址为:20.0.0.21,主机名为:node1,需要服务 Elasticsearch
一台centos7.4虚拟机,IP地址为:20.0.0.22,主机名为:node2,需要服务 Elasticsearch,Kibana
一台centos7.4虚拟机,IP地址为:20.0.0.23,主机名为:apache,需要服务 Logstash,Apache
防火墙,核心防护关闭
2.2、配置Elasticsearch 环境
(1)登录20.0.0.21,更改主机名,配置域名解析,查看Java环境(没有则需要)
hostnamectl set-hostname node1
vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
java -version
(2)安装Elasticsearch
把准备好的包拖进来解压
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch.service
(3)修改配置文件
cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/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
55 network.host: 0.0.0.0
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
(4)创建数据存放路径并授权
mkdir -p /data/elk_data/
chown elasticsearch:elasticsearch /data/elk_data/
(5)启动Elasticsearch
systemctl start elasticsearch.service
netstat -antp | grep 9200
(6)真机浏览器打开 20.0.0.21:9200
(7)配置node2:20.0.0.22 Elasticsearch环境 与上面几乎一致
主机名设为node2
修片配置文件为 23 node.name: node2
然后真机浏览器打开 20.0.0.22:9200
(8)集群健康检查和状态
真机浏览器输入20.0.0.21:9200/_cluster/health?pretty(换成20.0.0.22:9200/_cluster/health?pretty也可以)
2.3、node1 和node2 安装elasticsearch-head 插件
上述安装成功后查看非常不直观,所以我们通过安装elasticsearch-head插件的方式来更加直观的查看集群情况,方便管理,以下仅展示node1的操作
(1)编译安装node组件依赖包
上传包到home
yum -y install gcc-c++ make gcc
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j3 编译时间较长约半个小时
make install
(2)安装phantomjs(前端框架)
上传包到/usr/local/src/
cd /usr/local/src/
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64//bin
cp phantomjs /usr/local/bin
(3)安装elasticsearch-head(数据可视化工具)
上传包到/usr/local/src/
cd /usr/local/src/
tar zxvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install
(4)修改主配置文件
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
systemctl restart elasticsearch.service
(5)启动elasticsearch-head
cd /usr/local/src/
cd elasticsearch-head/
npm run start &
netstat -lnupt |grep 9100
插入索引
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
(6)真机浏览器输入20.0.0.21:9100
2.4、apache 服务器部署logstash
(1)开局优化
hostnamectl set-hostname apache
yum -y install httpd
systemctl start httpd
java -version 没有java环境需安装
(2)安装logstash
上传包到/pot
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
(3)与elasticsearch(node)做对接测试
Logstash这个命令测试
字段描述解释:
● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
● -t 测试配置文件是否正确,然后退出
输入采用标准输入 输出采用标准输出,进行测试
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
The stdin plugin is now waiting for input:
11:33:17.455 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com 输入网址
2020-10-29T03:33:26.424Z apache www.baidu.com
测试:使用rubydebug显示详细输出,codec为一种编解码器
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
The stdin plugin is now waiting for input:
11:30:32.066 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com 输入网址
{
"@timestamp" => 2020-10-29T03:30:59.822Z,
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
使用logstash将信息写入elasticsearch中
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.21:9200"] } }'
The stdin plugin is now waiting for input:
11:43:46.129 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com 输入网址
(4)真机浏览器访问node1节点,查看索引信息
(5)做对接配置
Logstash配置文件主要由三部分组成:input、output、filter(根据需要来处理)
chmod o+r /var/log/messages
[root@apache opt]# vi /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["20.0.0.21:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@apache opt]# systemctl restart logstash.service
真机查看
2.5、node2 主机安装kibana
上传包到/usr/local/src/
cd /usr/local/src/
rpm -ivh kibana-5.5.1-x86_64.rpm
cd /etc/kibana/
cp -p kibana.yml kibana.yml.bak
[root@node2 kibana]# vi kibana.yml
2 server.port: 5601
7 server.host: "0.0.0.0"
21 elasticsearch.url: "http://20.0.0.21:9200"
30 kibana.index: ".kibana"
[root@node2 kibana]# systemctl start kibana.service
[root@node2 kibana]# systemctl enable kibana.service
真机查看
2.6、对接Apache主机的Apache 日志文件
cd /etc/logstash/conf.d/
touch apache_log.conf
[root@apache conf.d]# vi apache_log.conf
input {
file{
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["20.0.0.21:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.21:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
先真机访问apache网站20.0.0.23 产生日志
然后再访问http://20.0.0.21:9100能发现两个索引信息
可以进入kibana界面创建索引
平台搭建成功