赞
踩
ELK其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch
,Logstash
和 Kibana
。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为ELK协议栈
Elasticsearch
:是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎,使用Java语言编写Logstash
:是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)Kibana
:是一款基于 Apache开源协议,使用 JavaScript语言编写,为 Elasticsearch提供分析和可视化的 Web 平台。它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图简单来说,Logstash
用来收集数据,Elasticsearch
用来查数据,Kibana
用来展示数据
顺便说一下,由于Logstash
消耗的资源太多了并且以来Java环境,实际场景中已经很少把Logstash
部署到所有边缘级用来收集数据了,而是使用Beats
的软件来收集实时数据后传给Logstash
做数据再处理,如下图:
其中,Beats
是Elastic公司开发的轻量型数据采集器 ,相比约Logstash
,Beats
在运行过程中几乎不消耗资源。Beats
不是一个数据采集器,而是一个系列的采集器,包含:
FileBeat:日志文件(收集文件数据)
AuditBeat:审计数据(收集审计日志)
PacketBeats:网络数据(收集网络流量数据)
HeartBeat:运行时间监控(收集系统运行时的数据)
WinlogBeat:windows事件日志(收集Windows事件日志数据)
MetricBeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
FunctionBeat:面向云端数据的无服务器采集器(部署在云服务提供商的功能即服务 (FaaS) 平台上后,收集、传送并监测云服务的相关数据)
【官网:https://www.elastic.co/cn/beats/】
注明:以下操作都是基于Centos8
系统环境
官网下载地址
kafka:http://kafka.apache.org/downloads
kibana:https://www.elastic.co/cn/downloads/past-releases#kibana
filebeat:https://www.elastic.co/cn/downloads/past-releases#filebeat
logstash:https://www.elastic.co/cn/downloads/past-releases#logstash
elasticsearch:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
jdk1.8:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
下载解压
tar xzvf jdk-8u271-linux-x64.tar.gz -C /usr/local/
配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
刷新配置立即生效
source /etc/profile
查看版本
java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
安装Filebeat wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz tar xzvf filebeat-7.9.3-linux-x86_64.tar.gz mv filebeat-7.9.3-linux-x86_64.tar.gz/ /usr/local/filebeat 安装Logstash wget https://artifacts.elastic.co/downloads/logstash/logstash-7.9.3.tar.gz tar xzvf logstash-7.9.3.tar.gz mv logstash-7.9.3.tar.gz/ /usr/local/logstash 安装ElasticSearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.3-linux-x86_64.tar.gz tar xzvf elasticsearch-7.9.3-linux-x86_64.tar.gz mv elasticsearch-7.9.3-linux-x86_64.tar.gz/ /usr/local/elasticsearch 安装Kibana wget https://artifacts.elastic.co/downloads/kibana/kibana-7.9.3-linux-x86_64.tar.gz tar xzvf kibana-7.9.3-linux-x86_64.tar.gz mv kibana-7.9.3-linux-x86_64.tar.gz/ /usr/local/kibana 安装Kafka wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.6.0/kafka_2.13-2.6.0.tgz tar xzvf kafka_2.13-2.6.0.tgz mv kafka_2.13-2.6.0.tgz/ /usr/local/kafka
创建用户并设置权限(ELK组件不能在root用户下运行,必须新建用户)
以下配置操作都在elk用户下进行
groupadd elk
useradd elk -g elk
chown -R elk:elk /usr/local/elasticsearch/
chown -R elk:elk /usr/local/kibana/
chown -R elk:elk /usr/local/logstash/
chown -R elk:elk /usr/local/kafka/
chown -R elk:elk /usr/local/filebeat/
修改ES配置文件(/usr/local/elasticsearch/config/elasticsearch.yml)
# 集群名 cluster.name: elk # 节点名 node.name: node-1 # 存储数据 path.data: /data/elk/data # 存放日志 path.logs: /data/elk/logs # 锁内存,尽量不使用交换内存 bootstrap.memory_lock: true # 网络地址 network.host: 0.0.0.0 http.port: 9200 # 发现集群hosts discovery.seed_hosts: ["host1", "host2"] # 设置集群master节点,配置内容为master的node.name cluster.initial_master_nodes: ["node-1"]
修改系统配置(/etc/sysctl.conf)
echo "vm.max_map_count=262144" > /etc/sysctl.conf
sysctl -p
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
修改配置后退出当前用户重新进入才能生效
启动
/usr/local/elasticsearch/bin/elasticsearch -d # -d 后台运行 测试 $ curl "http://127.0.0.1:9200" { "name" : "node-1", "cluster_name" : "cluster-1", "cluster_uuid" : "IUDI*********tRa6w", "version" : { "number" : "7.9.3", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "c2138*********06fe5c868", "build_date" : "2020-10-16T10:36:16.131335Z", "build_snapshot" : false, "lucene_version" : "8.6.2", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
【ES官网配置说明】
修改Kibana配置文件(/usr/local/kibana/config/kibana.yml)
vim /usr/local/elasticsearch/config/elasticsearch.yml
server.port: 5601 # port
server.host: 0.0.0.0 # 访问限制
elasticsearch.hosts: ["http://localhost:9200"] # elasticsearch 访问地址
i18n.locale: "zh-CN" # 中文
启动/停止
启动
./bin/kibana # 启动成功后尝试访问 http://192.168.18.128:5601
停止
kill -s 9 $pid # pid可以用 netstat -talnp | grep 5601 查找
新增配置文件(/usr/local/logstash/first-pipelines.yml)
cat /usr/local/logstash/first-pipelines.yml # The # character at the beginning of a line indicates a comment. Use # comments to describe your configuration. input { beats { # Logstash对filebeat开放,用来接受日志的端口 port => "5044" } } # The filter part of this file is commented out to indicate that it is # optional. filter { grok { # grok是Logstash内置的 基于正则表达式的 用于解析传入日志的插件,目前支持120+种解析方式,详见下面连接 # https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns match => { "message" => "%{HTTPD_COMBINEDLOG }"} # HTTPD_COMBINEDLOG是内置解析web日志的捕获规则,详见 https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/httpd } } output { elasticsearch { hosts => [ "localhost:9200" ] # 解析后日志传给ES } }
启动
cd /usr/local/logstash
测试配置
./bin/logstash -f first-pipelines.yml --config.test_and_exit
启动服务
./bin/logstash -f first-pipeline.conf --config.reload.automatic # 配置修改后自动加载
和上面的几个软件不同的是,filebeat不是部署在中心,而是部署在需要收集日志的服务器上
vim /usr/local/filebeat/filebeat.yml
filebeat.inputs: # 设置日志收集的对象
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access.log # 日志文件位置
output.logstash:
hosts: ["$host:5044"] # $host替换成Logstash 服务器/集群 的 ip/域名
filebeat收集日志后不仅可以给Logstash还可以给kafka或ES
此外,filebeat在收集日志方面也内置了多个模块,详见/usr/local/filebeat/modules.d/目录
例如要收集nginx日志还可以这样配置
修改配置文件
vim /usr/local/filebeat/modules.d/nginx.yml.disabled
- module: nginx
access:
enabled: true
var.paths:
- /tmp/access.log
去掉disabled后缀,让filebeat能读到这个配置
mv /usr/local/filebeat/modules.d/nginx.yml.disabled /usr/local/filebeat/modules.d/nginx.yml
启动
/usr/local/filebeat/filebeat -e -c filebeat.yml
另:data/registry/是filebeat传输记录点,删除该文件后重启filebeat会重新传输日志
rm /usr/local/filebeat/data/registry/ -rf
上面部署成功之后,登录Kibana查看上传的数据,http://127.0.0.1:5601/app/management/data/index_management/indices
最后
这是个人第一次学习ELK时的学习记录,因此没有太多原理和高级配置,只求跑通整个流程
另外
如果你是外网的服务器想访问内网的虚拟机或本地服务,可以试试 ngrok 这个软件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。