目录
一、ELK简介
1、什么是ELK
2、ELK工作原理及过程编辑
3、ELK相关名词介绍
①Elasticsearch介绍
②Logstash介绍
③Kibana介绍
④Fluentd介绍
⑤Filebeat介绍
二、ELK部署
1、实验环境
2、安装elasticsearch
3、安装logstash
编辑4、安装kiabana
编辑 5、监控apache日志
三、ELFK部署
1、实验环境
2、部署filebeat
3、logstash配置及验证
四、ELK及ELFK排错思路
1、filebeat侧排查
2、logstash侧排查
3、ES、kibana侧问题
ELK日志分析系统:由3个组件组成 Elasticesearch、Kiabana、Logstash完成更强大的用户对日志的查询排序和统计需求
日志服务器作用:提高安全性、集中存放日志、
缺陷:对日志分析困难
①、将日志进行集中化管理,从消息队列进入logstash
②、logstash将日志进行过滤、格式化并输出到Elasticsearch
③、Elasticsearch对格式化的数据进行索引和存储
④、Kibana从Elasticsearch中获取数据进行前端数据的展示
基于Lucenne(全文搜索引擎的架构)分布式多用户能力的全文搜索引擎、基于JAVA开发、可扩展的,允许进行全文结构化搜索。理解为全局搜索引擎
核心概念:接近实时、集群、节点、索引(库--表--文档记录)、分片和副本、
数据收集引擎,强大的数据处理工具,可以实现数据传输、格式处理、格式化输出、数据输入、数据加工(过滤、改写等)以及数据输出。
作用:数据收集引擎,支持动态的从各种数据源收集数据,对数据进行过滤、分析、丰富统一格式等操作,存储到用户指定的位置,一般发送给elasticsearch。
组件:Shipper、indexer、Boker、search and storage 、web interface
logstash常用命令:
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash的输入和输出流,可以加载配置文件
-e:从命令中获取,输入、输出后面跟着字符串,此字符串可以被当做logstash的配置,如果为空默认使用stdin输入stdout输出
-t:测试配置文件是否正确然后退出
ES的一个功能强大的数据可视化,提供图形化的web界面流量ES日志数据,汇总分析搜索重要数据。
Filebeat:轻量级的开源日志文件数据收集器。通常在需要采集数据的客户端安装,指定目录与日志格式,filebeat能快速收集数据,发送给logstash或直接发送给ES存储,性能上比运行在JVM上的logstash优势明显。常用于ELFK架构
流行的开源数据收集器,logstash太重量级的缺点,引入logstash性能低耗费资源少、更易用、性能更高,常用于EFK中
轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中。
节点名 | ip地址 | 安装软件 |
node1 | 192.168.30.11 | elasticsearch、kibana |
node2 | 192.168.30.12 | elasticsearch |
apache | 192.168.30.14 | apache、logstash |
node1、node2执行:
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
cd /opt
将es的rpm安装包上传到/opt目录下
rpm -ivh elasticsearch-5.5.0.rpm
#安装elasticsearch
systemctl daemon-reload
#重新加载system管理
systemctl enable elasticsearch.service
#设置服务开机自启
vim /etc/elasticsearch/elasticsearch.yml
#修改elasticsearch配置文件
添加内容:
cluster.name: my-elk-cluster
#设置es集群名称
node.name: node2
#设置本机节点名称
path.data: /data/elk_data
#指定数据存放路径
path.logs: /var/log/elasticsearch
#指定日志存放路径(固定)
bootstrap.memory_lock: false
#启动时不锁定内存
network.host: "0.0.0.0"
#监听地址所有
http.port: 9200
#监听端口为9200ES的默认端口
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.service
netstat -antp | grep 9200
#启动ELK并检查是否启动成功,netstat查看端口会有延迟,可以直接查看服务状态
浏览器验证节点信息网页显示status是green则表示状态正常:
192.168.30.11:9200/_cluster/health?pretty
192.168.30.13:9200/_cluster/health?pretty
apache机器执行:
systemctl stop firewalld
setenforce 0
#关闭防火墙和selinux
cd /opt
#将logstash的rpm安装包上传到/opt目录下
rpm -ivh logstash-5.5.1.rpm
#安装logstash
systemctl enable logstash.service --now
#设置开机自启logstash并立即启动
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
#配置logstash命令全局可用
chmod +r /var/log/messages
#设置任何人可读此日志
vim /etc/logstash/conf.d/system.conf
#编辑一个新的logstash子配置文件读取
文件内容:
input {
file{
path =>"/var/log/messages" #指定要收集的日志的位置
type =>"system" #自定义日志类型标识
start_position =>"beginning" #表示从开始处收集
}
}
output {
elasticsearch { #输出到 elasticsearch
hosts => ["192.168.30.11:9200"] #指定 elasticsearch 服务器的地址和端口
index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式
}
}
systemctl restart logstash
#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
www.baidu.com
#测试logstash,输完命令后输入www.baidu.com查看是否会出现下图内容,出现则表示无问题退出即可
node1节点操作:
cd /opt
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
rpm -ivh kibana-5.5.1-x86_64.rpm
#安装kibana
vim /etc/kibana/kibana.yml
添加内容:
server.port: 5601
#监听端口5601
server.host: "0.0.0.0"
#监听地址所有
elasticsearch.url: "http://192.168.30.11:9200"
#从那台es中获取数据
kibana.index: ".kibana"
systemctl enable kibana.service --now
netstat -natp | grep 5601
#启动 Kibana 服务
验证 Kibana
浏览器访问 http://192.168.30.11:5601
第一次登录需要添加一个 Elasticsearch 索引:
Index name or pattern
//输入:system-* #在索引名中输入之前配置的 Output 前缀“system”
单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果,如下图
apache节点:
yum install -y apache
systemctl start httpd
#安装启动apache并在本机页面访问apache 192.168.30.14
vim /etc/logstash/conf.d/apache_log.conf
#创建一个apache的logstash子配置文件
添加内容:
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.30.11:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.30.11:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
cd /etc/logstash/conf.d/
#进入logstash子配置文件路径
logstash -f apache_log.conf
#热加载新的子配置文件apache
#浏览器访问 http://192.168.30.11:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。
选择“Discover”选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。
节点名 | ip地址 | 安装软件 |
node1 | 192.168.30.11 | elasticsearch、kibana |
node2 | 192.168.30.12 | elasticsearch |
apache | 192.168.30.14 | apache、logstash |
pc3 | 192.168.30.13 | filebeat |
pc3新机器上执行:
cd /opt
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
#将filebeat压缩包上传到/opt路径下并解压
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
#解压后的文件夹移动到/usr/local路径下并改名为filebeat
vim /usr/local/filebeat/filebeat.yml
#编辑filebeat配置文件,注意格式
filebeat.prospectors: //filebeat.input:
- type: log
#指定 log 类型,从日志文件中读取消息
enabled: true
paths:
- /var/log/messages
#指定监控的日志文件
- /var/log/*.log
fields: #可以使用 fields 配置选项设置一些参数字段添加到 output 中
service_name: filebeat
log_type: log
service_id: 192.168.30.14
#filebeat的地址
--------------Elasticsearch output-------------------
(全部注释掉)
----------------Logstash output---------------------
output.logstash:
hosts: ["192.168.30.13:5044"]
#指定 logstash 的 IP 和端口
/usr/local/filebeat/filebeat -e -c filebeat.yml
#启动 filebeat
logstash即apache节点:
cd /etc/logstash/conf.d
vim logstash.conf
input {
beats {
port => "5044"
#输入从5044端口
}
}
output {
elasticsearch {
hosts => ["192.168.30.11:9200"]
#输出到es中,格式为调用filebeat的变量+年月日
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
#启动 logstash
logstash -f logstash.conf
浏览器访问 http://192.168.30.11:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引“filebeat-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
## **20230407**
第一步:排查filebeat上的配置文件有没有写错,filebeat的配置文件是yml文件,一定要注意格式。
第二步:查看filebeat上能否telnet通logstash上的5044端口,若ping不通则要查看防火墙和filebeat的配置文件是否指向错误,或者在logstash加载filebeat配置文件时即执行 logstash -f logstash.conf时查看弹出的日志中是否有connection fail或者no route等字样,此2个错误表示防火墙或者5044端口与filebeat不通
第一步:首先在加载配置文件是查看是否与filebeat成功建立连接,若不成功检查端口5044和防火墙selinux等是否关闭。连接成功截图如下
第二步:查看logstash的日志文件tail -f -n 50 /var/log/logstash/logstash-plain.log是否有output到ES的字样,连接成功截图如下。若没有output则检查filebeat或logstash自身是否成功采集数据,主要查看配置文件和端口防火墙问题
第一步:若kibana侧不能创建索引,则需要在ES上查看是否有对应名称的索引,命令如下
curl -X GET "192.168.30.11:9200/_cat/indices/?v"
#使用时将ip和端口换为自己的ES端口,若索引过多可直接加管道符使用grep过滤名称
第二步:若ES上没有数据,则需要去排查logstash上是否将数据传输过来,若ES上有索引但是kibana创建索引成功后日志显示No results found。则需要调整一下获取的时间,或者访问一下服务产生一些日志即可。