亿级 ELK 日志平台构建实践

网友投稿 873 2023-03-07

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

亿级 ELK 日志平台构建实践

本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统。

废话不多说,老司机们座好了,我们准备发车了~~~

整体架构

Kafka:数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Elasticsearch:分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。

Kibana:可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

版本说明

Filebeat:6.2.4Kafka:2.11-1Logstash:6.2.4Elasticsearch:6.2.4Kibana:6.2.4相应的版本最好下载对应的插件。

具体实践

我们就以比较常见的 Nginx 日志来举例说明下,日志内容是 JSON 格式。

Filebeat

为什么用 Filebeat ,而不用原来的 Logstash 呢?

原因很简单,资源消耗比较大。

由于 Logstash 是跑在 JVM 上面,资源消耗比较大,后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级的 Agent 叫 Logstash-forwarder。

后来作者加入 elastic.co 公司, Logstash-forwarder 的开发工作给公司内部 GO 团队来搞,最后命名为 Filebeat。

Filebeat 需要部署在每台应用服务器上,可以通过 Salt 来推送并安装配置。

下载:

解压:

tar -zxvf filebeat-6.2.4-darwin-x86_64.tar.gzmv filebeat-6.2.4-darwin-x86_64 filebeatcd filebeat

tar -zxvf filebeat-6.2.4-darwin-x86_64.tar.gzmv filebeat-6.2.4-darwin-x86_64 filebeatcd filebeat

修改配置:修改 Filebeat 配置,支持收集本地目录日志,并输出日志到 Kafka 集群中。

$ vim fileat.ymlfilebeat.prospectors:- input_type: log  paths:    -  /opt/logs/server/nginx.log  json.keys_under_root: true  json.add_error_key: true  json.message_key: logoutput.kafka:     hosts: ["192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092"]  topic: 'nginx'

$ vim fileat.ymlfilebeat.prospectors:- input_type: log paths: - /opt/logs/server/nginx.log json.keys_under_root: true json.add_error_key: true json.message_key: logoutput.kafka: hosts: ["192.168.0.1:9092,192.168.0.2:9092,192.168.0.3:9092"] topic: 'nginx'

Filebeat 6.0 之后一些配置参数变动比较大,比如 document_type 就不支持,需要用 fields 来代替等等。

启动:

$ ./filebeat -e -c filebeat.yml

$ ./filebeat -e -c filebeat.yml

Kafka

生产环境中 Kafka 集群中节点数量建议为(2N + 1 )个,这边就以 3 个节点举例。

下载:

直接到官网下载 Kafka。

解压:

tar -zxvf kafka_2.11-1.0.0.tgzmv kafka_2.11-1.0.0 kafkacd kafka

tar -zxvf kafka_2.11-1.0.0.tgzmv kafka_2.11-1.0.0 kafkacd kafka

修改 ZooKeeper 配置:

修改 ZooKeeper 配置,搭建 ZooKeeper 集群,数量 ( 2N + 1 ) 个。

ZooKeeper 集群建议采用 Kafka 自带,减少网络相关的因素干扰。

$ vim zookeeper.propertiestickTime=2000dataDir=/opt/zookeeperclientPort=2181maxClientCnxns=50initLimit=10syncLimit=5server.1=192.168.0.1:2888:3888server.2=192.168.0.2:2888:3888server.3=192.168.0.3:2888:3888

$ vim zookeeper.propertiestickTime=2000dataDir=/opt/zookeeperclientPort=2181maxClientCnxns=50initLimit=10syncLimit=5server.1=192.168.0.1:2888:3888server.2=192.168.0.2:2888:3888server.3=192.168.0.3:2888:3888

ZooKeeper data 目录下面添加 myid 文件,内容为代表 ZooeKeeper 节点 id (1,2,3),并保证不重复。

$ vim /opt/zookeeper/myid1

$ vim /opt/zookeeper/myid1

启动 ZooKeeper 节点:

分别启动 3 台 ZooKeeper 节点,保证集群的高可用。

$ ./zookeeper-server-start.sh -daemon ./config/zookeeper.properties

$ ./zookeeper-server-start.sh -daemon ./config/zookeeper.properties

修改 Kafka 配置:

Kafka 集群这边搭建为 3 台,可以逐个修改 Kafka 配置,需要注意其中 broker.id 分别 (1,2,3)。

$ vim ./config/server.propertiesbroker.id=1port=9092host.name=192.168.0.1num.replica.fetchers=1log.dirs=/opt/kafka_logsnum.partitions=3zookeeper.connect=192.168.0.1: 192.168.0.2: 192.168.0.3:2181zookeeper.connection.timeout.ms=6000zookeeper.sync.time.ms=2000num.io.threads=8num.network.threads=8queued.max.requests=16fetch.purgatory.purge.interval.requests=100producer.purgatory.purge.interval.requests=100delete.topic.enable=true

$ vim ./config/server.propertiesbroker.id=1port=9092host.name=192.168.0.1num.replica.fetchers=1log.dirs=/opt/kafka_logsnum.partitions=3zookeeper.connect=192.168.0.1: 192.168.0.2: 192.168.0.3:2181zookeeper.connection.timeout.ms=6000zookeeper.sync.time.ms=2000num.io.threads=8num.network.threads=8queued.max.requests=16fetch.purgatory.purge.interval.requests=100producer.purgatory.purge.interval.requests=100delete.topic.enable=true

启动 Kafka 集群:

分别启动 3 台 Kafka 节点,保证集群的高可用。

$ ./bin/kafka-server-start.sh -daemon ./config/server.properties

$ ./bin/kafka-server-start.sh -daemon ./config/server.properties

查看 topic 是否创建成功。

$ bin/kafka-topics.sh --list --zookeeper localhost:2181nginx

$ bin/kafka-topics.sh --list --zookeeper localhost:2181nginx

监控 Kafka Manager:

Kafka-manager 是 Yahoo 公司开源的集群管理工具。

如果遇到 Kafka 消费不及时的话,可以通过到具体 cluster 页面上,增加 partition。Kafka 通过 partition 分区来提高并发消费速度。

Logstash

Logstash 提供三大功能:

INPUT 进入FILTER 过滤功能OUTPUT 出去

如果使用 Filter 功能的话,强烈推荐大家使用 Grok debugger 来预先解析日志格式。

下载:

解压重命名:

$ tar -zxvf logstash-6.2.4.tar.gz$ mv logstash-6.2.4 logstash

$ tar -zxvf logstash-6.2.4.tar.gz$ mv logstash-6.2.4 logstash

修改 Logstash 配置:修改 Logstash 配置,使之提供 indexer 的功能,将数据插入到 Elasticsearch 集群中。

$ vim nginx.confinput {  kafka {    type => "kafka"    bootstrap_servers => "192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181"    topics => "nginx"    group_id => "logstash"    consumer_threads => 2  }}output {  elasticsearch {    host => ["192.168.0.1","192.168.0.2","192.168.0.3"]    port => "9300"    index => "nginx-%{+YYYY.MM.dd}"  }}

$ vim nginx.confinput { kafka { type => "kafka" bootstrap_servers => "192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181" topics => "nginx" group_id => "logstash" consumer_threads => 2 }}output { elasticsearch { host => ["192.168.0.1","192.168.0.2","192.168.0.3"] port => "9300" index => "nginx-%{+YYYY.MM.dd}" }}

启动 Logstash:

$ ./bin/logstash -f nginx.conf

$ ./bin/logstash -f nginx.conf

Elasticsearch

下载:

解压:

$ tar -zxvf elasticsearch-6.2.4.tar.gz$ mv elasticsearch-6.2.4.tar.gz elasticsearch

$ tar -zxvf elasticsearch-6.2.4.tar.gz$ mv elasticsearch-6.2.4.tar.gz elasticsearch

修改配置:

$ vim config/elasticsearch.ymlcluster.name: es node.name: es-node1network.host: 192.168.0.1discovery.zen.ping.unicast.hosts: ["192.168.0.1"]discovery.zen.minimum_master_nodes: 1

$ vim config/elasticsearch.ymlcluster.name: es node.name: es-node1network.host: 192.168.0.1discovery.zen.ping.unicast.hosts: ["192.168.0.1"]discovery.zen.minimum_master_nodes: 1

启动:

通过 -d 来后台启动。

$ ./bin/elasticsearch -d

$ ./bin/elasticsearch -d

控制台:

Cerebro 这个名字大家可能觉得很陌生,其实过去它的名字叫 kopf !因为 Elasticsearch 5.0 不再支持 site plugin,所以 kopf 作者放弃了原项目,另起炉灶搞了 cerebro,以独立的单页应用形式,继续支持新版本下 Elasticsearch 的管理工作。

注意点:

Kibana

下载:

解压:

$ tar -zxvf kibana-6.2.4-darwin-x86_64.tar.gz$ mv kibana-6.2.4-darwin-x86_64.tar.gz kibana

$ tar -zxvf kibana-6.2.4-darwin-x86_64.tar.gz$ mv kibana-6.2.4-darwin-x86_64.tar.gz kibana

修改配置:

启动 Kibana:

$ nohup ./bin/kibana &

$ nohup ./bin/kibana &

界面展示:

总结

综上,通过上面部署命令来实现 ELK 的整套组件,包含了日志收集、过滤、索引和可视化的全部流程,基于这套系统实现分析日志功能。同时,通过水平扩展 Kafka、Elasticsearch 集群,可以实现日均亿级的日志实时处理。

上一篇:Nginx曝DNS解析器Off-by-One堆写入高危漏洞CVE-2021-23017
下一篇:系统运维学习(系统运维学什么)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~