ELK日志分析系统
ELK日志分析系统
简介
ELK=elasticsearch+logstash+kibana
日志服务器
提高安全性
集中存放日志
缺陷:对日志分析困难
日志处理步骤
将日志进行集中化管理
将日志格式化(logstash)并输出到elasticsearch
对格式化后的数据进行索引和存储(elasticsearch)
前端数据展示(kibana)
elasticsearch
概述
提供了一个分布式多用户能力的全文搜索引擎
核心概念
接近实时
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到能够被搜到,有一个轻微的延迟(一秒左右)
集群(cluster)
集群就是有一个或多个节点组织在一起,es具有集群机制,节点通过去集群名称加入集群,同时在集群中的节点会有一个自己的身份唯一标识
节点(node)
及单一的服务器,是集群的一部分
索引(index)
一个索引就是一个拥有积分相似的文档的集合
索引是相对于关系型数据库的库
类型(type)
在一个索引中,可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区。
类型是相对于关系型数据库的表
文档(document)
是一个可被索引的基础信息单元。
文档是相对于关系型数据库的列
副本和分片
在实际情况下,索引存储的数据可能超过单个节点的硬件限制,所以es提供了将索引分成多个分片的功能。在创建索引时,可定义想要的分片数量。每一个分片是一个独立的全功能索引,可位于集群中的任何节点上
分片的原因:水平分割扩展,增大存储量。分布式跨片操作,提高性能和吞吐量
由于网络等问题,为了健壮性,建议要有一个故障切换机制,无论何种故障以防止分片或节点不可用,为此es将索引分片复制成一份或多份,称之为分片副本或副本
副本的原因:高可用性,以应对分片或节点的故障,所以,副本要在不同的节点上。增大吞吐量,可以并行在所有副本上执行
logstash
介绍
一款强大的数据处理工具
可实现数据传输,格式处理,格式化输出
数据输入,数据加工(如过滤改写)以及数据输出
主要组件
shipper:日志收集。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来
indexer:日志存储。负责接收日志并写入到本地文件
broker:日志hub。负责连接多个shipper和多个indexer
search and storage:允许对事件进行搜索和存储
web interface:基于文本展示界面
logstash主机分类
理主机(agent):作为时间的传递者(shipper)将各种日志数据发送至中心主机
中心主机(center host):可运行包括中间转发器(broker),索引器(indexer),搜索和恶存储器(search 和storage),web界面端(web interface)在内的各个组件,以实现对日志数据的接收处理和存储
kibana
介绍
一个针对es的开源分析及可视化平台
搜索查看存储在es索引中的数据
通过各种图表进行高级数据分析及展示
主要功能
es无缝集成
整合数据,复杂数据分析
接口灵活,容易分享
配置简单,可视化多数据源
简单数据导出
elk配置
准备
命名
i
p20.0.0.10:hostnamectl set-hostname nd1
su
ip20.0.0.20:hostnamectl set-hostname nd2
su
ip20.0.0.30:hostnamectl set-hostname apache
su
全部节点上映射
elasticsearch
在nd1、2上安装elasticsearch-rpm包
rpm -ivh elasticsearch-5.5.0.rpm #将elasticsearch-rpm包复制到/opt下,安装
systemctl daemon-reload #重新加载
systemctl enable elasticsearch.service #开机自启
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak #做配置之前,做好备份
vim /etc/elasticsearch/elasticsearch.yml
17// cluster.name:mec #群集名称
23// node.name: nd1 #节点名称
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: ["nd1", "nd2"] #集群发现通过单播实现
mkdir -p /data/elk_data #创建数据存放目录
chown elasticsearch:elasticsearch /data/elk_data/ #授权
systemctl start elasticsearch.service #启动服务
netstat -antp | grep 9200 #查看服务开启状态,需等待较长时间
在客户机上访问节点1和节点2的信息
查看集群的健康状态http://20.0.0.10:9200/_cluster/health?pretty
查看集群状态http://20.0.0.10:9200/_cluster/state?pretty
安装elasticsearch-head插件
用来管理集群
在两台节点上
yum -y install gcc gcc-c++ make
tar zxvf /opt/node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
安装phyantomjs前端框架
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cp /opt/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
安装可视化工具:
tar zxvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install
修改主配置文件
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enable: ture #开启跨域访问支持,默认false
http.cors.allow-origin: "*" #允许的地址
systemctl restart elasticsearch.service #重启服务
cd /opt/elasticsearch-head/
npm run start & #切到后台运行
netstat -anpt | grep 9100
在客户机上http://20.0.0.10:9100/
新建索引index-demo
logstash
在apache上
安装logstash
yum -y install httpd
systemctl start httpd
查看日志位置
rpm -ivh logstash-5.5.1.rpm
rpm -qc logstash
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
logstash(Apache)与elasticsearch (node)功能是否正常,做对接测试
logstash字段描述解释:
f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面的字符串是logstash的配置(为“” 时,默认使用标准输入和输出)
-t:测试配置文件
测试logstash与elasticsearch功能是否正常标
准化输入输出测试
logstash -e 'input { stdin{} } output { stdout{} }'
使用rubydebug显示详细输出,codec为一种编码解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
使用logstash将信息输出给elasticsearch
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.10:9200"] } }'
www.baidu.com
www.sina.com
在浏览器上查看
配置logstash配置文件
vim /etc/logstash/conf.d/system.conf
input { #logstash输入:从/var/log/messages输入,类型为system,起始位 置为从头开始
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output { #logstash输出:输出给elasticsearch(以IP地址指定位置)
elasticsearch {
hosts => ["20.0.0.10:9200"]
index => "system-%{+YYY.MM.dd}"
}
}
chmod o+r /var/log/messages
systemctl restart logstash.service
kibana
nd1上
rpm -ivh kibana-5.5.1-x86_64.rpm
vi /etc/kibana/kibana.ymlserver.port: 5601 #kinaba端口号
server.host: "0.0.0.0" #监听所有网段
elasticsearch.url: "http://20.0.0.10:9200" #和es建立联系
kibana.index: ".kibana" #建立索引
systemctl start kibana.service
systemctl enable kibana.service
在浏览器上访问20.0.0.10:5601
management–>输入system-*->create->discover
对接apache
在apache上
vi /etc/logstash/conf.d/system.conf
input {
file{
path => "/etc/httpd/logs/access_log" # apache 的 access日志位置
type => "access" # 类型为 access,就是类似于索引,在kibana可以便于查看
start_position => "beginning" # 从日志的开头开始
}
file{
path => "/etc/httpd/logs/error_log" # apache 的 error日志位置
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" { # 做一个判断,对应上面的索引名。如果匹配为access,则把内容导向节点,然后名称为apache_access.%{+YYYY.MM.dd}格式
elasticsearch {
hosts => ["20.0.0.10:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
logstash -f /etc/logstash/conf.d/system.conf
在kibana中创建索引