ELK日志分析系统概述与部署
一、ELK日志分析系统概述
(一)、ELK的组成
E:Elasticsearch
L:Logstash
K:Kibana
(二)、日志服务器
1、优点
提高安全性
集中存放日志
2、缺陷
对日志的分析困难
(三)、日志处理步骤
1、将日志进行集中化管理
2、将日志格式化(Logstash)并输出到 Elasticsearch
3、对格式化后的数据进行索引和存储( Elasticsearch)
4、前端数据的展示(Kibana)
(四)、Elasticsearch
1、概述
提供了一个分布式多用户能力的全文搜索(索引)引擎,开源。分布式即数据不会放在一个地方
2、特性
接近实时:指索引和数据处理的能力
集群:一个内部组件 ES 的架构(特性)
节点:有集群必定有节点
索引:索引(库)→ 索引类型(表)→ 索引的具体文档(记录)
分片:例如,一个40G的文件,分为两份20G的文件,存放至两个节点上,读取这个40G的文件时,会效率更快
副本:核心是为了容灾,不过也可以处理任务
分片加上副本的使用:例如,四台主机同时处理一项任务,理论上效率可以提高四倍
(五)、Logstash
1、概述
一款强大的数据处理工具
可实现数据传输、格式处理、格式化输出
数据输入、数据加工(如过滤,改写等)以及数据输出
由三个组件组成:Input、Output、Filter Plugin
Input:获取日志
Output:输出日志
Filter Plugin:过滤日志、格式处理
2、主要组件
Shipper
Indexer
Broker
Search and Storage
Web Interface
(六)、Kibana
1、概述
一个针对Elasticsearch的开源分析及可视化平台
搜索、查看存储在Elasticsearch索引中的数据
通过各种图表进行高级数据分析及展示
2、主要功能
Elasticsearch无缝之集成
整合数据,复杂数据分析
让更多团队成员受益
接口灵活,分享更容易
配置简单,可视化多数据源
简单数据导出
二、部署ELK日志分析系统
(一)、实验需求
配置ELK日志分析集群
使用Logstash收集日志
使用Kibana查看分析日志
(二)、实验设备与实验环境
主机名 | 操作系统 | IP地址 | 软件 |
---|---|---|---|
node1 | CentOS7 | 192.168.229.10 | Elasticsearch Kibana |
node2 | CentOS7 | 192.168.229.20 | Elasticsearch |
apache | CentOS7 | 192.168.229.30 | httpd / Logstash |
客户机 | Windows10 | 192.168.229.1 | —— |
所有节点,关闭系统防火墙和安全机制
systemctl stop firewalld.service
setenforce 0
设置各主机名
hostnamectl set-hostname node1
su
hostnamectl set-hostname node2
su
hostnamectl set-hostname apache
su
(三)、配置elasticsearch(node1、node2)
java -version #如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
echo '192.168.229.10 node1' >> /etc/hosts
echo '192.168.229.20 node2' >> /etc/hosts
cd /opt
上传elasticsearch-5.5.0.rpm
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch.service
修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
17/ cluster.name: my-elk-cluster ####集群名字
23/ node.name: node1 ####节点名字,Node2节点为node2
33/ path.data: /data/elk_data ####数据存放路径
37/ path.logs: /var/log/elasticsearch/ ####日志存放路径
43/ bootstrap.memory_lock: false ####不在启动的时候锁定内存(前端缓存。与IOPS-性能测试方式,每秒读写次数相关)
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"] ####集群发现通过单播实现
grep -v "^#" /etc/elasticsearch/elasticsearch.yml ####查看修改的配置
创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200
#服务启动较慢,耐心等待
查看节点信息
http://192.168.229.10:9200
http://192.168.229.20:9200
检测集群健康、查看集群状态
http://192.168.229.10:9200/_cluster/health?pretty
http://192.168.229.20:9200/_cluster/health?pretty
http://192.168.229.10:9200/_cluster/state?pretty
http://192.168.229.10:9200/_cluster/state?pretty
(四)、安装elasticsearch-head插件(node1、node2)
编译安装 node
yum -y install gcc gcc-c++ make
cd /opt
上传node-v8.2.1.tar.gz
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make
make install
安装 phantomjs
cd /opt
上传phantomjs-2.1.1-linux-x86_64.tar.bz2
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
cd /usr/local/src/
上传elasticsearch-head.tar.gz
tar xzvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install
修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch
启动 elasticsearch-head 服务
cd /usr/local/src/elasticsearch-head/
npm run start &
netstat -natp |grep 9100
打开浏览器输入
http://192.168.229.10:9100
http://192.168.229.20:9100
在Elasticsearch 后面的栏目中输入
http://192.168.229.10:9200
http://192.168.229.20:9200
插入索引(node1上操作)
通过命令插入一个测试索引,索引为 index-demo,类型为 test。
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
真机访问,查看索引信息
上面图可以看见索引默认被分片5个,并且有一个副本
(五)、部署 Logstash(apache节点)
yum -y install httpd
systemctl start httpd
cd /opt
上传logstash-5.5.1.rpm
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/
logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
logstash -e 'input { stdin{} } output { stdout{} }'
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
使用logstash将信息写入elasticsearch中,输入 输出 对接
打开浏览器 输入http://192.168.229.10:9100/ 查看索引信息
logstash配置文件(Apache主机 做对接配置)
Logstash配置文件主要由三部分组成:input、output、filter(根据需要)
chmod +r /var/log/messages
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages" #指定要收集的日志的位置
type =>"system" #自定义日志类型标识
start_position =>"beginning" #表示从开始处收集
}
}
output {
elasticsearch { #输出到 elasticsearch
hosts => ["192.168.229.10:9200"] #指定 elasticsearch 服务器的地址和端口
index =>"system-%{+YYYY.MM.dd}" #指定输出的索引格式
}
}
systemctl restart logstash
浏览器访问 http://192.168.229.10:9100查看索引信息
(六)、Kiabana 部署(Node1)
cd /usr/local/src/
上传kibana-5.5.1-x86_64.rpm
rpm -ivh kibana-5.5.1-x86_64.rpm
cd /etc/kibana/
cp kibana.yml kibana.yml.bak
vim kibana.yml
2/ server.port: 5601 #kibana打开的端口
7/ server.host: "0.0.0.0" #kibana侦听的地址
21/ elasticsearch.url: "http://192.168.229.10:9200" #和elasticsearch建立联系
30/ kibana.index: ".kibana" #在elasticsearch中添加.kibana索引
systemctl start kibana.service
systemctl enable kibana.service
使用浏览器输入192.168.229.10:5601
首次登录创建一个索引 名字:system-*
##这是对接系统日志文件
Index name or pattern ###下面输入system-*
然后点最下面的出面的create 按钮创建
然后点最左上角的Discover按钮 会发现system-*信息
然后点下面的host旁边的add 会发现右面的图只有 Time 和host 选项了 这个比较友好
(七)、将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
cd /etc/logstash/conf.d/
vim /etc/logstash/conf.d/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.229.10:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.229.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
/usr/share/logstash/bin/logstash -f apache_log.conf
打开浏览器 输入http://192.168.229.10:9100/ 查看索引信息
打开浏览器 输入http://192.168.229.10:5601
点击左下角有个management选项—index patterns—create index pattern
----分别创建apache_error-*
和 apache_access-*
的索引