ELK日志分析系统
一.环境概述
ELK有 ElasticSearch 、Logstash 、KIbana三个开源软件组成。
Elasticsearch是个开源分布式搜索引擎,特点是:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful分割接口,多数据源,自动搜索负载等。
Logstash是个完全开源的工具,他可以对日志进行收集、过滤,并将其存储,供以后使用。
Kibana也是个开源和免费的工具,为Logstash、Elasticsearch提供有好的日志分析Web界面。
ELK工作原理展示图
ELK有 ElasticSearch 、Logstash 、KIbana三个开源软件组成。
Elasticsearch是个开源分布式搜索引擎,特点是:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful分割接口,多数据源,自动搜索负载等。
Logstash是个完全开源的工具,他可以对日志进行收集、过滤,并将其存储,供以后使用。
Kibana也是个开源和免费的工具,为Logstash、Elasticsearch提供有好的日志分析Web界面。
ELK工作原理展示图
Logstash收集AppServer产生的log,并存放到Elasticsearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
1,将日志进行集中化管理(beats).
2,将日志格式化(logstash).
3,对格式化后的数据进行索引和存储(elasticsearch).
4,前端数据的展示(kibana)
1,将日志进行集中化管理(beats).
2,将日志格式化(logstash).
3,对格式化后的数据进行索引和存储(elasticsearch).
4,前端数据的展示(kibana)
二、Elastic search介绍。
ES核心概念
1.接近实时
Elasticsearch是一个搜索速度接近实时的搜索平台,响应速度非常快。
2.集群(cluster)
一个集群就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。每个集群都有一个唯一性标示的名称,默认是Elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点,为了具有更好的容错性。强烈建议在配置Elasticsearch时,配置成集群模式。11
3.节点(node)
节点就是一台单一的服务器,每个节点都存储数据并参与集群的索引和搜索功能。节点也通过名字来标识,可以通过指定集群名字来加入到集群中。
4.索引(index)
类似数据库中的“库”的概念。
5.类型(type)
在一个索引中,可以定义一种或多种类型。
ES核心概念
1.接近实时
Elasticsearch是一个搜索速度接近实时的搜索平台,响应速度非常快。
2.集群(cluster)
一个集群就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。每个集群都有一个唯一性标示的名称,默认是Elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点,为了具有更好的容错性。强烈建议在配置Elasticsearch时,配置成集群模式。11
3.节点(node)
节点就是一台单一的服务器,每个节点都存储数据并参与集群的索引和搜索功能。节点也通过名字来标识,可以通过指定集群名字来加入到集群中。
4.索引(index)
类似数据库中的“库”的概念。
5.类型(type)
在一个索引中,可以定义一种或多种类型。
三、Logstash介绍。
Logstash有JRuby语言编写,运行在java虚拟机上,是一款强大的数据处理工具。
Logstash有JRuby语言编写,运行在java虚拟机上,是一款强大的数据处理工具。
Logstash的理念:
collect: 数据输入。
enrich: 数据加工。
transport: 数据输出。
collect: 数据输入。
enrich: 数据加工。
transport: 数据输出。
Logstash的主要组件。
Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可。
Indexer:日志存储者。负责接收日志并写入到本地文件。
Broker:日志Hub,负责连接多个Shipper和多个Indexer.
Search and Storage:允许对事件进行搜索和存储。
Web Interface:基于Web的展示界面。
Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可。
Indexer:日志存储者。负责接收日志并写入到本地文件。
Broker:日志Hub,负责连接多个Shipper和多个Indexer.
Search and Storage:允许对事件进行搜索和存储。
Web Interface:基于Web的展示界面。
四、Kibana介绍
Kibana是一个针对Elasticsearch的开源分析及可视化平台,主要涉及用来和Elasticsearch一起工作。可以搜索、查看交互存储在Elasticsearch素引中的数据。并通过各种图表进行高级数据分析及展示。kibana可以让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。kibana使用非常简单,只需要添加索引就可以检测Elasticsearch索引数据。
五、配置ELK日志分析系统。
如图所示:配置和安装ELK日志分析系统,安装集群方式,2个elasticsearch节点分配4GB
(>2GB)内存,并监控apache(1GB内存)服务器日志。
如图所示:配置和安装ELK日志分析系统,安装集群方式,2个elasticsearch节点分配4GB
(>2GB)内存,并监控apache(1GB内存)服务器日志。
Elasticsearch 端口9200.
1.在2个ELK节点上配置名称解析,通过本地文件/etc/hosts文件实现
hostname elk-node1
vim /etc/hosts
192.168.200.181 elk-node1
192.168.200.181 elk-node2
保存退出。
bash
节点二上相同操作,名称不同。
2.配置2台elk-node 的Java环境
java -version //系统自带的环境也可以。
java -version //系统自带的环境也可以。
3.安装Elasticsearch软件。
elasticsearch 可以通过yum安装、源码安装都可以,这里通过rpm包进行安装,2个elk-node节点都要安装.
rpm -ivh elasticsearch-5.5.0.rpm
elasticsearch 可以通过yum安装、源码安装都可以,这里通过rpm包进行安装,2个elk-node节点都要安装.
rpm -ivh elasticsearch-5.5.0.rpm
通过执行命令配置成系统服务并设置自动开机启动,2个节点都要做.
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl daemon-reload
systemctl enable elasticsearch.service
4.更改elastic search主配置文件,每台节点都要做。
vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster #集群名字,名字相同才会分到相同集群
23 node.name: elk-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 #提供服务绑定的IP地址,0.0.0.0代表所有
59 http.port: 9200 #指定监听端口
68 discovery.zen.ping.unicast.hosts: ["elk-node1", "elk-node2"] #集群中的实例名
##注意(此处添加的内容node1与node2此处不同,此处添加为主节点)
http.cors.enabled: true #开启跨区域传送
http.cors.allow-origin: "*" #跨区域访问允许的域名地址
保存退出
vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster #集群名字,名字相同才会分到相同集群
23 node.name: elk-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 #提供服务绑定的IP地址,0.0.0.0代表所有
59 http.port: 9200 #指定监听端口
68 discovery.zen.ping.unicast.hosts: ["elk-node1", "elk-node2"] #集群中的实例名
##注意(此处添加的内容node1与node2此处不同,此处添加为主节点)
http.cors.enabled: true #开启跨区域传送
http.cors.allow-origin: "*" #跨区域访问允许的域名地址
保存退出
5.创建数据存放目录。每个节点都要做。
mkdir -p /data/elk_data #此处与主配置文件内要符合。
chown elasticsearch:elasticsearch /data/elk_data/
mkdir -p /data/elk_data #此处与主配置文件内要符合。
chown elasticsearch:elasticsearch /data/elk_data/
6.启动服务。
systemctl start elasticsearch.service
#首次启动如果确认步骤未错的情况下但是没有端口,耐心等待一会儿。
netstat -lnpt | grep 9200
systemctl start elasticsearch.service
#首次启动如果确认步骤未错的情况下但是没有端口,耐心等待一会儿。
netstat -lnpt | grep 9200
7.访问测试。
在浏览器访问服务器的9200端口
192.168.200.181:9200
查看集群健康情况 可以看到status为green绿色
http://192.168.200.181:9200/_cluster/health?pretty
在浏览器访问服务器的9200端口
192.168.200.181:9200
查看集群健康情况 可以看到status为green绿色
http://192.168.200.181:9200/_cluster/health?pretty
8.安装elasticsearch-head插件
直接访问效果不太直观,可以添加head插件,这个插件需要npm命令。
tar xf node-v8.2.1-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/node-v8.2.1-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node-v8.2.1-linux-x64/bin/npm /usr/local/bin
node -v #能够查看版本
npm -v #能够查看版本
直接访问效果不太直观,可以添加head插件,这个插件需要npm命令。
tar xf node-v8.2.1-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/node-v8.2.1-linux-x64/bin/node /usr/bin/node
ln -s /usr/local/node-v8.2.1-linux-x64/bin/npm /usr/local/bin
node -v #能够查看版本
npm -v #能够查看版本
9.安装elasticsearch-head 作为独立节点并后台启动,这将启动运行在9100上的本地web服务器,该端口服务于elasticsearch-head
tar xf elasticsearch-head.tar.gz -C /data/elk_data/ #在之前安装elasticsearch时修改配置文件的数据的位置
cd /data/elk_data/
chown -R elasticsearch:elasticsearch elasticsearch-head/
cd /data/elk_data/elasticsearch-head/
npm install
#报错为正常现象,忽略即可
cd _site/
cp app.js{,.bak}
vim app.js
4329 this.base_uri=this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.200.67:9200"; ##更改为自身的ip
保存退出
npm run start &
systemctl start elasticsearch.service
netstat -anpt |grep 9100
tar xf elasticsearch-head.tar.gz -C /data/elk_data/ #在之前安装elasticsearch时修改配置文件的数据的位置
cd /data/elk_data/
chown -R elasticsearch:elasticsearch elasticsearch-head/
cd /data/elk_data/elasticsearch-head/
npm install
#报错为正常现象,忽略即可
cd _site/
cp app.js{,.bak}
vim app.js
4329 this.base_uri=this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.200.67:9200"; ##更改为自身的ip
保存退出
npm run start &
systemctl start elasticsearch.service
netstat -anpt |grep 9100
10.浏览器测试
http://192.168.200.181:9100
为浏览器测试页面插入一个测试索引,索引为index-demo,类型为test ,可以看到成功创建,在一台机器上创建即可,一般工作中不用我们来编写,开发会做成的
http://192.168.200.181:9100
为浏览器测试页面插入一个测试索引,索引为index-demo,类型为test ,可以看到成功创建,在一台机器上创建即可,一般工作中不用我们来编写,开发会做成的
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type:application/json' -d '{ "user": "zhangsan","mesg":"hello world" }'
刷新浏览器页面就可以看到了
http://192.168.200.181:9100
刷新浏览器页面就可以看到了
http://192.168.200.181:9100
11.安装logstash
Logstash一般部署在需要监控其日志的服务器中的。也需要java环境。和es一项需要java环境。
Logstash一般部署在需要监控其日志的服务器中的。也需要java环境。和es一项需要java环境。
rpm -ivh logstash-5.5.1rpm
systemctl start logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
systemctl start logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
12.logstash命令使用。
在logstash中,包括了三个阶段:输入input->处理filter(不是必须的)->输出output。
在logstash中,包括了三个阶段:输入input->处理filter(不是必须的)->输出output。
输入input
-f:通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“”则默认使用 stdin作为输入,stdout作为输出)
-t:测试配置文件是否正确,然后退出
-f:通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“”则默认使用 stdin作为输入,stdout作为输出)
-t:测试配置文件是否正确,然后退出
logstash -e 'input { stdin{} } output { stdout{} }'
#标准输入和标准输出
logstash -e 'input { stdin{} } output { student{ codec=>rubydebug} }'
#使用rubydebug显示详细输出,codec为一种编xxx。
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.200.181:9200"]} }'
#标准输入和输出到es集群中。
#标准输入和标准输出
logstash -e 'input { stdin{} } output { student{ codec=>rubydebug} }'
#使用rubydebug显示详细输出,codec为一种编xxx。
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.200.181:9200"]} }'
#标准输入和输出到es集群中。
配置文件的使用。
logstash配置文件基本上由三部分组成,input、output以及用户需要才添加的filter,因此标准的配置文件格式如下:
input{..}.
filter{...}
output{...}
在每个部分中,也可以指定多个访问方式,例如我想要指定两个日志来源文件,则可以这样写:
input{
file{path =>"/var/log/messages"type =>"syslog"}
file{path =>"/var/log/apache/access.log"type =>"apache"}
}
案例:
将system.conf放到/etc/logstash/conf.d/目录中,logstash启动时便会加载。
将system.conf放到/etc/logstash/conf.d/目录中,logstash启动时便会加载。
cd /etc/logstash/conf.d
vim system.conf
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.200.67:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
保存退出
systemctl restart logstash
cd
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf //加载文件
vim system.conf
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.200.67:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
保存退出
systemctl restart logstash
cd
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf //加载文件
13.安装kibana。
rpm -ivh kibana-5.5.1-x86_64.rpm
systemctl enable kibana.service
vim /etc/kibana/kibana.yml
2 server.port: 5601
7 server.host: "0.0.0.0"
21 elasticsearch.url: "http://192.168.200.67:9200"
30 kibana.index: ".kibana"
保存退出
systemctl start kibana.service
netstat -lnpt | grep 5601
使用浏览器访问测试:
192.168.200.181:5601