ELK 日志文件分析系统
Posted serendipity_cat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELK 日志文件分析系统相关的知识,希望对你有一定的参考价值。
ELK日志分析
- 一、概述
- 二、ELK的组件
- 三、日志处理步骤
- 四、Elasticsearch 介绍
- 五、Logstash 介绍
- 六、Kibana 介绍
- 七、搭建部署ELK
- 1.1 拓扑图
- 1.2 配置步骤
- 1.2.1 配置节点名
- 1.2.1 配置 Elasticsearch 环境
- 1.2.2 部署 Elasticsearch 软件
- 1.2.3 修改es主配置文件
- 1.2.4 检查集群的健康和状态
- 1.2.5 安装 elasticsearch-head 插件
- 1.2.6 安装 phantomjs(前端框架)
- 1.2.7 安装 elasticsearch-head(数据可视化工具)
- 1.2.8 修改Elasticsearch主配置文件
- 1.2.9 启动 elasticsearch-head
- 1.2.10 安装 logstash 搜集日志输出到 Elasticsearch 中
- 1.2.11 安装 logstash
- 1.2.13 配置Kibana API对接
- 1.2.13 安装 Kibana
一、概述
为了解决人工分析日志的难度,帮助恢复、帮助故障定位、访问来源信息等
索引自动分片、索引副本机制、restful风格接口
多数据源、自动搜索负载
二、ELK的组件
1.1 Elasticsearch
逻辑型数据库用于搜索引擎比如百度
1.2 Logstash
抓取获取日志并格式化后输出给es
数据库
1.3 Kibana
将es
的数据进行前端数据展示,借助于它将数据进行图表化
三、日志处理步骤
1. 将日志集中化管理(四种工具)
① Packetbeat 搜索网络流量数据
② Topbeat 搜索系统、进程和文件系统级别的CPU和内存使用情况
③ Filebeat 搜集文件数据
④ winlogbeat 搜集Windows事件日志数据
框架结构
EFK(ELFK)架构 应用服务器+logstash -> Filebeat搜集 -> logstash数据格式化 ->(kafka作为消息队列) -> es数据库 -> kibaba图表化展示
应用服务器+logstash -> Filebeat搜集 -> logstash数据格式化 -> zookeeper+n*kafka
2. logstash将日志格式化并输出给es数据库
3. es对格式化后的数据进行索引和存储
4. kibanna可以对数据添加字段和图表化展示
四、Elasticsearch 介绍
Elasticsearch 由Java开发且开放源码,常用于云计算,能够达到实时搜索,并具稳定可靠快速(副本和分片)
- 分片将索引分为多个分片,每个分片是一个独立的索引,可以位于集群中任何节点上
- 分布式并行跨分片操作,可以提高性能和吞吐量、水平分割扩展、增大存储量
- 副本对分片进行冗余(保存的数据跟主不同)可多副本增加允许故障数量
mysql | ES |
---|---|
库 | 索引 |
表 | 类型 |
列 | 数据 |
面试题
Elasticsearch的分片和副本默认分别是几个?
五个分片和一个分片
五、Logstash 介绍
一款强大的数据处理工具,完全开源,基于消息(message-based)的简单架构,并运行在 java 虚拟机(JVM)上
- Collect 数据收集
- Enrich 数据加工
- Transport 数据输出
1.1 Logstash 主要组件
1.2 Shipper 日志收集者
负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,
1.3 Indexer 日志存储
负责接收日志并写入到本地文件。
1.4 Broker 日志Hub
负责连接多个Shipper和多个Indexer
1.5 Search and Storage
允许对事件进行搜索和存储
1.6 Web Interface
基于web的展示界面
正是由于以上组件在L四stash架构中可独立部署,才提供了更好的集群扩展性
远程代理端(agent)只需要运行这个组件即可
六、Kibana 介绍
一个针对 Elasticsearch 的分析及提供友好、可视化的 Web 平台,开源免费!
用于搜索、查看存储在 Elasticsearch 索引中的数据
可以通过各种图表进行高级数据分析及展示,让海量数据更容易被理解
- 它操作简单,基于浏览器的用户界面,可以快速创建仪表板(Dashboard)实时显示 ES 查询动态设置非常简单
Kibana架构为es定制,可以将结构化和非结构化存储到es索引中
input
插件接收filter
插件搜集并格式处理源数据库并output
插件导出给目标数据库
七、搭建部署ELK
1.1 拓扑图
节点名 | IP地址 | 使用软件 |
---|---|---|
Node1 | 192.168.0.10 | Elasticsearch、Kibana |
Node2 | 192.168.0.20 | Elasticsearch |
Apache | 192.168.0.30 | Logstash |
1.2 配置步骤
1.2.1 配置节点名
Node1
hostnamectl set-hostname node1
su -
Node2
hostnamectl set-hostname node2
su -
Node3
hostnamectl set-hostname apache
su -
1.2.1 配置 Elasticsearch 环境
Node1/Node2
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum -y install java-1.8.0-openjdk*
echo '192.168.0.10 node1' >> /etc/hosts
echo '192.168.0.20 node2' >> /etc/hosts
1.2.2 部署 Elasticsearch 软件
Node1/Node2
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
#设置开机自启
systemctl daemon-reload
systemctl enable elasticsearch.service
1.2.3 修改es主配置文件
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 #节点名字
//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/
systemctl start elasticsearch
netstat -antp |grep 9200
1.2.4 检查集群的健康和状态
#查看节点信息
查看节点信息,用宿主机浏览器打开 http://192.168.0.10:9200
查看节点信息,用宿主机浏览器打开 http://192.168.0.20:9200
#检查群集健康情况
用宿主机浏览网页,打开 http://192.168.0.10:9200/_cluster/health?pretty
用宿主机浏览网页,打开 http://192.168.0.20:9200/_cluster/health?pretty
#检查群集状态信息
打开 http://192.168.0.10:9200/_cluster/state?pretty
打开 http://192.168.0.20:9200/_cluster/state?pretty
1.2.5 安装 elasticsearch-head 插件
安装 node 组件依赖包
cd /usr/local/
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar -xJf node-v10.16.3-linux-x64.tar.xz
echo "export NODE_HOME=/usr/local/node-v10.16.3-linux-x64
export PATH=$NODE_HOME/bin:$PATH" >> /etc/profile
source /etc/profile
node -v
npm -v
1.2.6 安装 phantomjs(前端框架)
cd /usr/local/src/
#将软件包传至本目录下
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
1.2.7 安装 elasticsearch-head(数据可视化工具)
cd /usr/local/src/
#将软件包传至本目录下
tar zxvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install
1.2.8 修改Elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
#在尾部添加配置
http.cors.enabled: true
http.cors.allow-origin: "*"
#注释
1.开启跨域访问支持,默认为false
2.跨域访问允许的域名地址
systemctl restart elasticsearch
1.2.9 启动 elasticsearch-head
cd /usr/local/src/elasticsearch-head/
npm run start &
#切换到后台运行
netstat -lnupt |grep 9100
netstat -lnupt |grep 9200
在宿主机上打开浏览器,访问 http://192.168.0.10:9100/
在宿主机上打开浏览器,访问 http://192.168.0.20:9100/
然后在 Elasticsearch 后面的栏目中摄入 http://192.168.0.10:9200,点击连接,查看群集颜色是否是健康的绿色
然后在 Elasticsearch 后面的栏目中摄入 http://192.168.0.20:9200,点击连接,查看群集颜色是否是健康的绿色
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"fox","mesg":"hello cat"}'
#索引为index-demo,类型为test,可以看到成功创建
1.打开浏览器输入http://192.168.0.10:9100/ 查看索引信息
2.可以看见索引默认被分片5个,并且有一个副本
3.点击数据浏览,会发现在node1上创建的索引为index-demo,类型为test这些相关的信息
1.2.10 安装 logstash 搜集日志输出到 Elasticsearch 中
Apache
# 安装httpd服务
yum install -y httpd
systemctl start httpd
yum -y install java-1.8.0-openjdk*
1.2.11 安装 logstash
Apache
cd /opt
#将软件包传至本目录下
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{} }'
www.baidu.com #输入内容
www.sina.com。cn #输入内容
#使用 rubydebug 显示详细输出,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
www.baidu.com #输入内容
www.sina.com.cn #输入内容
#使用logstash将信息写入elasticsearch输入,输出 对接
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.0.10:9200"] } }'
使用宿主机浏览 http://192.168.0.10:9100/ ,查看索引信息
使用宿主机浏览 http://192.168.0.20:9100/ ,查看索引信息
1.2.13 配置Kibana API对接
Apache
chmod o+r /var/log/messages
ll /var/log/messages
配置文件中定义的是收集系统日志(system)
vim /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.0.10:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
systemctl restart logstash.service
测试登录192.168.0.10:9100,连接192.168.0.10:9200 查看是否有system的索引
1.2.13 安装 Kibana
Node1
cd /usr/local/src/
#将软件包传至本目录下
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.0.10:9200" #和elasticsearch建立联系
//30行 kibana.index: ".kibana" #在elasticsearch中添加.kibana索引
systemctl start kibana.service
systemctl enable kibana.service
访问浏览器192.168.0.10:5601
1.首次登录创建一个索引 名字:logstash-* ##这是对接系统日志文件
Index name or pattern
#下面输入logstash-*
2.然后点最下面的出面的create 按钮创建
3.然后点最左上角的Discover按钮,会发现logstash-*信息
4.然后点下面的host旁边的add,会发现右面的图只有Time和host选项了,个比较友好
对接 Apache 主机的 Apache 日志文件
Apache(192.168.0.30):
cd /etc/logstash/conf.d/
touch apache_log.conf
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.0.10:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.0.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
# 指定文件测试
/usr/share/logstash/bin/logstash -f apache_log.conf
以上是关于ELK 日志文件分析系统的主要内容,如果未能解决你的问题,请参考以下文章