网站技术报务费如何做会计分录,不允许做企业网站,电子电路自学网站,郑州网站建设蝶动科技搭建日志系统ELK(二)
架构设计
在搭建以ELK为核心的日志系统时#xff0c;Logstash作为日志采集的核心组件#xff0c;负责将各个服务的日志数据采集、清洗、过滤。然而缺点也很明显#xff1a;
占用较多的服务器资源。配置复杂#xff0c;学习曲线陡峭。处理大数据量时…搭建日志系统ELK(二)
架构设计
在搭建以ELK为核心的日志系统时Logstash作为日志采集的核心组件负责将各个服务的日志数据采集、清洗、过滤。然而缺点也很明显
占用较多的服务器资源。配置复杂学习曲线陡峭。处理大数据量时性能下降。
在我们设计架构时尽量会选择减少主机使用资源轻量高性能又能满足日志采集的需求。有没有这么一个开源服务呢答案便是go-stash。
特性/服务logstashgo-stash定义ElasticStack 的一部分用于日志收集和处理。高效的数据处理和存储工具Go 语言实现。性能灵活性高但可能在处理大数据量时性能下降。高吞吐量性能是 logstash 的5倍左右资源消耗占用较多的服务器资源。节省了2/3的服务器资源。易用性配置复杂学习曲线陡峭。易用性高配置更简洁直观。过滤器系统强大的过滤器系统支持多种数据处理方式。内置一套丰富的过滤器允许自定义处理逻辑。
架构图 各服务功能
filebeatFilebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置收集日志事件并将它们转发到kafka进行索引。Kafka: Kafka 是一个分布式的基于发布/订阅模式的消息队列Message Queue主要应用于大数据实时处理领域。go-stash: go-stash是一个高效的从Kafka获取根据配置的规则进行处理然后发送到ElasticSearch集群的工具。Elasticsearch一个基于Lucene的搜索引擎提供快速的全文搜索能力适合处理大规模数据集并且具备高可扩展性。Kibana一个开源的数据分析和可视化平台能够让用户通过图表、地图等各种方式直观地理解Elasticsearch中的数据。
流程概述
日志数据的流动遵循从产生到消费的流程。
使用docker部署的服务容器服务产生的日志以json格式会存储在 /var/lib/docker/containers/**/*-json.log部署filebeat服务采集容器日志并将它们转发到kafka进行索引go-stash是一个高效的从Kafka获取根据配置的规则进行处理然后发送到ElasticSearch集群中进行索引和存储。Kibana作为前端界面从Elasticsearch检索数据并提供数据可视化。
部署
文件目录
log-collect
|-- deploy
| |-- filebeat
| | -- conf
| | -- filebeat.yml
| -- go-stash
| -- etc
| -- config.yaml
|-- docker-compose.yaml配置文件
filebeat.yml
filebeat.inputs:- type: logenabled: truepaths:- /var/lib/docker/containers/*/*-json.logfilebeat.config:modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falseprocessors:- add_cloud_metadata: ~- add_docker_metadata: ~output.kafka:enabled: truehosts: [kafka:9092]#要提前创建topictopic: openui-logpartition.hash:reachable_only: truecompression: gzipmax_message_bytes: 1000000required_acks: 1go-stash.yml
Clusters:- Input:Kafka:Name: gostashBrokers:- kafka:9092Topics:- openui-logGroup: proConsumers: 16Filters:- Action: dropConditions:- Key: k8s_container_nameValue: -rpcType: contains- Key: levelValue: infoType: matchOp: and- Action: remove_fieldFields:# - message- _source- _type- _score- _id- version- topic- index- beat- docker_container- offset- prospector- source- stream- metadata- Action: transferField: messageTarget: dataOutput:ElasticSearch:Hosts:- http://elasticsearch:9200Index: openui-{{yyyy-MM-dd}}Username: elasticPassword: tester部署
docker-compose.yaml
version: 3services:elasticsearch:image: elasticsearch:7.13.4container_name: elasticsearchuser: rootenvironment:- discovery.typesingle-node- ES_JAVA_OPTS-Xms512m -Xmx512m- TZAsia/Shanghaivolumes:- ./data/elasticsearch/data:/usr/share/elasticsearch/data- ./data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.ymlrestart: alwaysports:- 9200:9200- 9300:9300networks:- openui_net#查看elasticsearch数据 - Kibana to view Elasticsearch datakibana:image: kibana:7.13.4container_name: kibanaenvironment:- elasticsearch.hostshttp://elasticsearch:9200- elasticsearch.usernameelastic- elasticsearch.passwordtester- TZAsia/Shanghairestart: alwaysnetworks:- openui_netports:- 5601:5601depends_on:- elasticsearch#elasticsearch UIelastichd:container_name: elastichdimage: containerize/elastichdrestart: alwaysnetworks:- openui_netports:- 9800:9800depends_on:- elasticsearchkafka-ui:container_name: kafka-uiimage: provectuslabs/kafka-ui:latestports:- 9090:8080environment:DYNAMIC_CONFIG_ENABLED: trueKAFKA_CLUSTERS_0_NAME: kafka-workKAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092depends_on:- kafkanetworks:- openui_net#消费kafka中filebeat收集的数据输出到es - The data output collected by FileBeat in Kafka is output to ESgo-stash:image: eilinge/go-stash # golang:v1.22container_name: go-stashenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghaiuser: rootrestart: alwaysvolumes:- ./deploy/go-stash/etc:/app/etcnetworks:- openui_netdepends_on:- elasticsearch- kafka#收集业务数据 - Collect business datafilebeat:image: elastic/filebeat:7.13.4container_name: filebeatenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghaiuser: rootrestart: alwaysentrypoint: filebeat -e -strict.permsfalse #解决配置文件权限问题 - Solving the configuration file permissionsvolumes:- ./deploy/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml- /var/lib/docker/containers:/var/lib/docker/containersnetworks:- openui_netdepends_on:- kafka#zookeeper是kafka的依赖 - Zookeeper is the dependencies of Kafkazookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperenvironment:# 时区上海 - Time zone Shanghai (Change if needed)TZ: Asia/Shanghairestart: alwaysports:- 2181:2181networks:- openui_net#消息队列 - Message queuekafka:image: wurstmeister/kafkacontainer_name: kafkaports:- 9092:9092environment:- KAFKA_ADVERTISED_HOST_NAMEkafka- KAFKA_ZOOKEEPER_CONNECTzookeeper:2181- KAFKA_AUTO_CREATE_TOPICS_ENABLEfalse- TZAsia/Shanghairestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.socknetworks:- openui_netdepends_on:- zookeepernetworks:openui_net:driver: bridgeipam:config:- subnet: 172.16.0.0/16环境服务搭建
[rootmaster log-collect]# docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
elastichd ElasticHD elastichd running 0.0.0.0:9800-9800/tcp, :::9800-9800/tcp
elasticsearch /bin/tini -- /usr/l… elasticsearch running 0.0.0.0:9200-9200/tcp, 0.0.0.0:9300-9300/tcp, :::9200-9200/tcp, :::9300-9300/tcp
filebeat filebeat -e -strict… filebeat running
go-stash ./stash -f etc/conf… go-stash running
kafka start-kafka.sh kafka running 0.0.0.0:9092-9092/tcp, :::9092-9092/tcp
kafka-ui /bin/sh -c java --… kafka-ui running 0.0.0.0:9090-8080/tcp, :::9090-8080/tcp
kibana /bin/tini -- /usr/l… kibana running 0.0.0.0:5601-5601/tcp, :::5601-5601/tcp
zookeeper /bin/sh -c /usr/sb… zookeeper running 0.0.0.0:2181-2181/tcp, :::2181-2181/tcp检查各服务是否正常运行
elastic-cluster kafka-cluster kafka-topic kibana 劣势分析
通过部署文件很明显的存在一些劣势
依赖性过高 容器之间各自负责不同的功能学习成本增加。资源消耗每个容器可能需要额外的资源如内存和CPU。复杂性容器编排和管理需要一定的学习和运维成本。网络配置容器间的网络通信需要合理配置以确保数据流畅。
ISSUE
在上述部署的过程也不是一番风顺有些错误对一个接触相关服务较少的同学而言就容易退缩。还好出现的常见问题在网上都能找到解决方法主要还是需要我们保持一颗热爱学习的心。 Kibana的Stack Monitoring显示节点offline ElasticSearchKibana设置用户名密码 ES开启密码安全认证后elastichd的连接方式 go-stash 依赖json-iterator版本较低 使用我基于golang:v1.22最新构建的 go-stash镜像 elasticSearch 文件权限不足启动失败
项目地址
Log-Collect