ELK虚拟机构建
简介
是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。
Elasticserach
是一个基于Lucene的开源分布式搜索服务器。
特点:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源, 自动搜索负载等。
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
在elasticsearch中,所有节点的数据是均等的。
弹性搜索,日志存储
logstash
部署在产生日志的应用服务器上,用于收集日志
是一个完全开源工具,可以对你的日志进行收集、过滤、分析,并将其存储供以后使用(如,搜索),logstash带有一个web界面,搜索和展示所有日志。
Kibana
通过WEB页面向用户展示。
是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,
Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志
如上图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
产生日志—>收集日志->存储日志->展示日志->查看日志
环境
- 操作系统
centos 7.4 - 防火墙
firewalld 关闭
selinux 关闭 - 域名解析 /etc/hosts
elk-node1
elk-node2 - 服务器
elk-node1 192.168.87.129 #master机器
elk-node2 192.168.87.130 #slave机器
关于master-salve模式
master收集到日志后,会把一部分数据碎片到slave上(随机的一部分数据);
同时,master和slave又都会各自做副本,并把副本放到对方机器上,这样就保证了数据不会丢失。
如果master宕机了,那么客户端在日志采集配置中将elasticsearch主机指向改为slave,就可以保证ELK日志的正常采集和web展示。
- 内存
大于2G
Elasticsearch
1、基础环境安装:elk-node1和elk-node2同时操作
- 1 下载并安装GPG Key
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
- 2 添加yum仓库
vim /etc/yum.repos.d/elasticsearch.repo
----------------------
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
- 3 安装elasticsearch
yum install -y elasticsearch redis nginx java
- 4 安装相关测试软件(略)
- 5 测试环境
java -version
-------------------------
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
2、配置部署
elk-node1 配置
- 1 修改配置文件
自定义存储目录
mkdir -p /data/es-data
修改属组
[root@elk-node1 ~]- chown -R elasticsearch.elasticsearch /data/
vim /etc/elasticsearch/elasticsearch.yml //追加配置下面内容
cluster.name: huanqiu # 组名(同一个组,组名必须一致)
node.name: elk-node1 # 节点名称,建议和主机名一致
path.data: /data/es-data # 数据存放的路径
path.logs: /var/log/elasticsearch/ # 日志存放的路径
bootstrap.mlockall: true # 锁住内存,不被使用到交换分区去(通常在内部不足时,休眠的程序内存信息会交换到交换分区)
network.host: 0.0.0.0 # 网络设置
http.port: 9200 # 端口
discovery.zen.ping.multicast.enabled: false 有一个内置的24地址用于组播通信 置为false就关闭了 关闭多播
discovery.zen.ping.unicast.hosts: ["10.18.41.31","10.18.41.137"] 主服务器和自己的地址
- 2 启动并查看
[root@elk-node1 ~]# systemctl start elasticsearch 启动elasticsearch
[root@elk-node1 ~]# systemctl enable elasticsearch
[root@elk-node1 ~]# systemctl status elasticsearch
# netstat -antlp |egrep "9200|9300"
- 3 测试
http://192.168.87.129:9200
elk-node2配置
跟上面的node1 配置相同
只需改一下
vim /etc/elasticsearch/elasticsearch.yml //追加配置下面内容
cluster.name: huanqiu # 组名(同一个组,组名必须一致)
node.name: elk-node2 # 节点名称,建议和主机名一致
path.data: /data/es-data # 数据存放的路径
path.logs: /var/log/elasticsearch/ # 日志存放的路径
bootstrap.mlockall: true # 锁住内存,不被使用到交换分区去(通常在内部不足时,休眠的程序内存信息会交换到交换分区)
network.host: 0.0.0.0 # 网络设置
http.port: 9200 # 端口
discovery.zen.ping.multicast.enabled: false 有一个内置的24地址用于组播通信 置为false就关闭了 关闭多播
discovery.zen.ping.unicast.hosts: ["10.18.41.31","10.18.41.137"] 主服务器和自己的地址
3 安装插件1
elk-node1和elk-node2上都要安装
两台安装完毕并重启,再来进行访问和数据插入测试
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
最实用的通过web界面来查看elasticsearch集群状态信息
-----------------------
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
---------------------
systemctl restart elasticsearch
启动
http://192.168.87.129:9200/_plugin/head/
3 安装插件2
/usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
----------------
chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins
----------------
systemctl restart elasticsearch
启动
http://192.168.87.130:9200/_plugin/kopf
logstash
部署在应用服务器上
elk-node1和elk-node2来模拟应用服务器。与分离部署本质的区别只是上报地址不同。
- 1 下载并安装GPG Key
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
- 2 添加yum仓库
- vim /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
- 3 安装logstash
- yum install -y logstash 126M大小
- 4 logstash启动(略)
集群配置需要重启。测试环境单机重启没有必要
- systemctl start elasticsearch
- systemctl status elasticsearch
- 5 数据收集测试1:命令行单行操作
--- 5.1 基本的输入输出
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }'
命令解释
-e 执行。(后期用-f带脚本的形式执行)
input{} 输入函数
output{} 输出函数
stdin{} 标准输入
stdout{} 标准输出
--- 5.2 使用rubydebug详细输出
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug} }'
-------------------
输出形式
{
"message" => "123456789",
"@version" => "1",
"@timestamp" => "2019-11-10T09:34:00.999Z",
"host" => "localhost.localdomain"
}
--- 5.3 把内容写到elasticsearch中
/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.87.129:9200"]} }'
image.png
---- 5.4 即写到elasticsearch中又写在文件中一份
# /opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.87.129:9200"]} stdout{ codec => rubydebug}}'
- 6 数据收集测试2:logstash的配置文件的编写
--- 6.1 简单的配置方式
---6.1.1 编写logstash的配置文件
- vim /etc/logstash/conf.d/01-logstash.conf
input { stdin { } }
output {
elasticsearch { hosts => ["192.168.1.160:9200"]}
stdout { codec => rubydebug }
}
- --- 6.1.2 执行
/opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf
--- 6.2 收集系统日志
1)编写logstash的配置文件
logstash收集文件的时候默认是从最后收集的,需要指定一下开始位置
logstash只会从最后寻找相比于上一次更新过的日志收集起来
- vim file.conf
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.1.160:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
2)执行
- /opt/logstash/bin/logstash -f file.conf &
如果中断,就表示日志不在收集!所以需要放在后台执行~
- 6.3 收集java日志
1)编写logstash的配置文件
- vim file.conf
` 多输入源,就多写几个input 请替换掉hosts地址 注意日志文件是否存在 type名称需要小写 `
input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
input {
file {
path => "/var/log/elasticsearch/huanqiu.log"
type => "es-error"
start_position => "beginning"
}
}
output {
if [type] == "system"{
elasticsearch {
hosts => ["192.168.87.129:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
if [type] == "es-error"{
elasticsearch {
hosts => ["192.168.87.129:9200"]
index => "es-error-%{+YYYY.MM.dd}"
}
}
}
---注意
如果你的日志中有type字段 那你就不能在conf文件中使用type
2)执行
- /opt/logstash/bin/logstash -f file.conf &
4)多行模式
[root@elk-node1 ~]# vim multiline.conf
input {
stdin {
codec => multiline { //多行模式。碰到指定模式之前,日志为无效。遇见模式时,才将模式之前的信息,收集成日志。
pattern => "^\[" //模式
negate => true //无效
what => "previous" //之前
}
}
}
output {
stdout {
codec => "rubydebug"
}
}
执行命令:
/opt/logstash/bin/logstash -f multiline.conf
-----------
在没有遇到[的时候,系统不会收集,只有遇见[的时候,才算是一个事件,才收集起来。
一般很少用到
- 7 模块总结
--- stdin logstash从标准输入中收集日志
--- stdout
--- file logstash从日志文件中收集日志
--- syslog logstash从系统日志程序中收集日志
--- tcp logstash从TCP程序端口中收集日志
--- udp logstash从UDP程序端口中收集日志
--- rubuydebug 通过rubuy库进行收集
--- multiline 多行模块
kibana
- 1 kibana的安装:
可以是一台独立服务器
- cd /usr/local/src 下载源码包
- wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz
- tar zxf kibana-4.3.1-linux-x64.tar.gz 解压
- mv kibana-4.3.1-linux-x64 /usr/local/
- ln -s /usr/local/kibana-4.3.1-linux-x64/ /usr/local/kibana 创建软连接方便查找
- 2 修改配置文件:
- cd /usr/local/kibana/config
- cp kibana.yml kibana.yml.bak
--------------------
- vim kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.160:9200"
kibana.index: ".kibana"
--------------------
运行
因为他一直运行在前台,要么选择开一个shell窗口,要么选择使用screen。
安装并使用screen启动kibana:
- yum -y install screen
- screen
- /usr/local/kibana/bin/kibana
[root@tivf18 root]# screen -r 8736 可以回到这个进程
-
3 访问kibana
http://192.168.87.129:5601/
1.添加索引名称
image.png
2.然后点击上面的Discover,在Discover中查看:
image.png
3.查看日志登陆,需要点击“Discover”-->"message",点击它后面的“add”
image.png
4.这样,右边显示的日志内容的属性就带了message和path
image.png
5.点击右边日志内容属性后面隐藏的<<,就可将内容向前缩进
image.png
image.png
6.添加新的日志采集项,点击Settings->+Add New,比如添加system系统日志。注意后面的*不要忘了。
7.删除kibana里的日志采集项,如下,点击删除图标即可。
image.png