文章目录
ELK日志分析系统简介:
日志服务器
●提供安全性
●集中存放日志
●缺陷
- 对日志的分析困难
●ELK日志分析流程:收集日志,传给ES去存储,Kibana会将收集的日志信息展现出来给管理员去查看
ELK日志分析系统
●Elasticsearch
●Logstash
●Kibana
日志处理步骤
- 1.将日志进行集中化管理
- 2.将日志格式化并输出到Elasticsearch
- 3.对格式化后的数据进行索引和存储
- 4.前端数据的展示
Elasticsearch介绍
Elasticsearch概述
●提供了一个分布式多用户能力的全文搜索引擎
Elasticsearch核心概念
●接近实时
- lasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够
搜索到有一个轻微的延迟(通常是1秒)
●集群:多个节点组成
- 一个集群就是由一个或多个节点组织在一起,他们共同持有整个数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个节点是可以通过选举产生的,并提供跨节点的联合索引和搜索功能。集群有一个唯一性标示的名字,默认是elasticsearch,一个集群可以只有一个节点。强烈建议在配置elasticseach时,配置成集群模式
●节点
- 节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,可以自己定义。改名字也很重要,在集群中用于识别服务器对应的节点
节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群
●索引
- 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部就是小写字母的),并且当我们要对对应于这个索引中的文档进行索引,搜索,更新和删除的时候,都要使用
到这个名字。在一个集群中,如果你想,可以定义任意多的索引
●索引(库)–>类型(表)–>文档(记录)
●分片和副本
Logstash介绍
●一款强大的数据处理工具
●可实现数据传输,格式处理,格式化输出
●数据输入,数据加工(如过滤,改写等)以及数据输出
Logstach主要组件
●Shipper:日志收集者。负责监控本地日志文化的变化,及时把日志文件的最新内容收集起来
●Indexer:日志存储者。负责接收日志并写入到本地文件
●Broker:日志Hub负责连接多个Shipper和多个Indexer
●Search and storage:允许对事件进行搜索和存储
●Web interface:基于web的展示界面
Kibana介绍
Kibana介绍
●一个针对Elasticsearch的开源分析及可视化平台
●搜索,查看存储在Elasticsearch索引中的数据
●通过各种图表进行高级数据分析及展示
Kibana主要功能
- Elasticsearch无缝之集成
- 整合数据,复杂数据分析
- 让更多团队成员收益
- 接口灵活,分享更容易
- 配置简单,可视化多数据源
- 简单数据导出
ELK服务器的部署
实验环境
一.Elasticsearch服务器的部署
推荐步骤:
node1与node2操作相同,此处仅展示node1的操作
1.修改主机名以便区分(这边显示node1节点的配置)
[root@localhost ~]# setenforce 0 ##关闭临时防护
[root@localhost ~]# iptables -F ##清空防火墙规则
[root@localhost ~]# hostnamectl set-hostname node1 ##修改主机名为node1方便区分
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts ##设置本地主机映射文件,node1和node2节点操作
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.148.132 node1 ##添加两个IP地址+主机名
192.168.148.133 node2
Node2
[root@node1 ~]# scp /etc/hosts root@192.168.148.133:/etc/hosts ##将修改信息拷贝到node2节点上
2.将ES工具放到OPT目录下,进行解压(两边节点都需要安装)
[root@node1 ~]# cd /opt/ ##将工具放到/opt目录下
3.更改配置文件
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak ##为安全考虑先拷贝一份
[root@node1 elasticsearch]# vim elasticsearch.yml ##修改配置文件
17 cluster.name: my-elk-cluster ##17行集群名字
23 node.name: node1 ##23行节点名称
33 path.data: /data/elk_data ##33行数据文件存放位置(过火自己去创建)
37 path.logs: /var/log/elasticsearch/ ##37行日志文件存放位置
43 bootstrap.memory_lock: false ##不在启动时锁定内存
55 network.host: 0.0.0.0 ##提供服务的绑定IP地址,0.0.0.0代表所有地址
59 http.port: 9200 ##监听端口为9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"] ##集群发现通过单播实现
[root@node1 elasticsearch]# mkdir -p /data/elk_data ##创建存放路径
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/ ##设置属主,属组
[root@node1 elasticsearch]# systemctl start elasticsearch.service ##开启服务
4.这时打开谷歌浏览器输入:192.168.148.132:9200可以访问页面
同理node2也是相同的配置,只是23行节点名称改为node2
node.name: node2
5.检查集群健康和状态
检查健康:地址后方加入/_cluster/health?pretty
检查状态:地址后方加入/_cluster/state?pretty
node1和node2安装elasticsearch-head插件(这边展示node1的安装)
[root@node1 elasticsearch]# cd /opt/
[root@node1 opt]# yum -y install gcc gcc-c++ make ##安装环境包
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz ##将软件包进行解压
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j3 ##编译指定线程
[root@node1 node-v8.2.1]# make install ##安装
6.安装phantomjs(前端框架)
[root@node1 opt]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
[root@node1 local]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/ ##将命令让系统识别
安装elasticsearch-head
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/ ##解压文件
[root@node1 opt]# cd /usr/local/src/
[root@node1 src]# ls
elasticsearch-head phantomjs-2.1.1-linux-x86_64
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install ##初始化项目
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml ##修改主配置文件然后重启服务
#
#action.destructive_requires_name: true
http.cors.enabled: true ##底行加入
http.cors.allow-origin: "*"
[root@node1 elasticsearch-head]# npm run start & ##启动项目切换到后台运行
[root@node1 elasticsearch-head]# systemctl restart elasticsearch ##重启ES服务
Node2节点
7.这时两边服务都起来后,直接打开浏览器输入http://192.168.148.132:9100/,做访问测试
输入http://192.168.148.133:9100/也一样可以查看信息
8.回到node1节点创建索引为index-demo;类型为test,登录网页测试
1.在网页上创建索引
2.回到node1节点插入数据
[root@node1 /]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"lisi","mesg":"hello word"}' ##索引类型为test ,用户为“lisi”
3.回到客户端查看
192.168.148.132也是一样的查看
二.logstash服务器部署
打开一台新的节点安装logstash并做一些日志搜集输出到elasticsearch中
1.关闭防火墙设置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# iptables -F
2.修改主机名,以便区分
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
3.安装hhttpd服务
[root@apache ~]# yum -y install httpd
4.安装logstash并进行配置
[root@apache ~]# cd /opt/
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm ##安装工具包
[root@apache opt]# systemctl start logstash.service ##开启服务
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##将命令建立软链接方便系统识别
Logstash这个命令测试 字段描述解释:
● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
● -t 测试配置文件是否正确,然后退出
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }' ##采用标准型输入和输出语法
5.采用rubydebug显示详细输出,codec为一种编解码器
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
6.使用logstash将信息写入elasticsearch中输入输出对接
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch{ hosts=>["192.168.148.132:9200"] } }' ##hosts指向主节点node1的地址和端口
回到网站刷新查看
7.配置对接
[root@apache log]# cd /var/log
[root@apache log]# chmod o+r messages ##给系统日志其他人能读的权限
[root@apache conf.d]# ll /var/log/messages
-rw----r--. 1 root root 120713 9月 15 15:55 /var/log/messages
[root@apache conf.d]# cd /etc/logstash/conf.d/ ##切换到conf.d的路径下
[root@apache conf.d]# vim system.conf ##编写配置文件
input {
file{
path => "/var/log/messages" ##路径
type => "system" ##索引类型
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.148.132:9200"] ##主机地址
index => "system-%{+YYYY.MM.dd}" ##索引开头
}
}
[root@apache conf.d]# systemctl restart logstash.service ##重启服务
8.打开浏览器刷新访问
三.kibana服务器部署
1.用第4个节点配置kibana
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname kibana
[root@localhost ~]# su
[root@kibana ~]# rpm -ivh kibana-5.5.1-x86_64.rpm ##安装工具
[root@kibana ~]# cd /etc/kibana/
[root@kibana kibana]# cp -p kibana.yml kibana.yml.bak ##拷贝一份备份
[root@kibana kibana]# vim kibana.yml ##修改配置文件
2 server.port: 5601 ##端口号开启
7 server.host: "0.0.0.0" ##服务侦听地址
21 elasticsearch.url: "http://192.168.148.132:9200" ##和ES工具建立联系
30 kibana.index: ".kibana" ##在elasticsearch中添加.kibana索引
[root@kibana kibana]# systemctl start kibana.service ##开启服务
2.打开浏览器输入http://192.168.148.135:5601/就可以访问页面系统信息测试了
但是ES的web端页面必须要有kibana的索引,这样kibana可以来统计数据了
可以查看日志信息
4.回到apache节点上配置对接apache主机的日志文件(访问成功 错误的)
[root@apache conf.d]# vim 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 => ["192.168.148.132:9200"]
index => "apache_access-%{+YYYY.MM.dd}" ####索引名称
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.148.132:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache conf.d]# logstash -f apache-log.conf ##指定配置文件做测试
5.再次用浏览器到ES端查看
6.回到kibana端可以创建两个apache的索引
实验到此为止ELK就部署成功了