ELK 集群,腾讯云上的日志监控不用愁

企业动态
公司项目,越来越多的系统在计划上云。如何监控云上的系统运行,是每个系统上云的过程中都会碰到的一个问题。在这里,我们以公司的某个项目为例,向大家详细阐述该项目上云后的日志监控方案,详细讲解如何通过ELK集群,实现每天百G日志的监控。

公司项目,越来越多的系统在计划上云。如何监控云上的系统运行,是每个系统上云的过程中都会碰到的一个问题。在这里,我们以公司的某个项目为例,向大家详细阐述该项目上云后的日志监控方案,详细讲解如何通过ELK集群,实现每天百G日志的监控。

此项目原本是一个包含众多业务流的一个 APP 监控系统,在迁移到腾讯云之后,希望接入更多的业务,日志监控压力也随之剧增,每天的日志数量将达到百 G 以上,为满足这个项目的日志监控需求,特意在腾讯云的 kubernetes(K8s) 上配置了一套 ELK 集群。

1.ELK 系统介绍

我们在 SNGAPM 项目这个配置的 ELK 系统主要包含四个部分 filebeat,logstash,elasticsearch 以及 kibana。其中

  • filebeat 主要负责日志的收集,能自动感知日志文件中增加的 log 条目。
  • logstash 主要复杂日志文件的转发,并且在转发过程中对日志进行过滤和整理。
  • elasticsearch 可以看作一个高效的集群化的数据库,可以直接通过 url 对其进行访问,在 ELK 中,主要复杂 ELK 的存储,也是真个 ELK 系统的核心。
  • kibana 可以看作 elasticsearch 的一个前端页面,其将用户的操作转化为 elasticsearch 的查询指令,并将从 elasticsearch 查询到的数据进行图形化展示。

2. ELK 集群预览

在物理机上,可以通过多台服务器构建一个 ELK 的集群,在腾讯云上,配置 ELK 集群的另一种方式就是通过 kubernetes 管理一个包含多个 pods 的 ELK。

 

 

3. ELK 集群配置

集群化的 ELK 系统的关键就是配置集群化的 elasticsearch 系统,通过配置 elasticsearch 的集群,实现海量日志的存储,和快速查询。

配置 elasticsearch 集群,我们主要参考了 github 上的一个样例 kubernetes-elasticsearch-cluster

我们将 elasticsearch 节点,分为 master, client, data 三种类型,分别负责不同的任务,其中

  • Master 节点 - 只复杂集群的管理,不存储日志数据,也不接受 HTTP 请求
  • Client 节点 - 主要负责接受 HTTP 请求,不存储日志数据
  • Data 节点 - 主要复杂数据的存储,不接受 HTTP 请求

在这,我们给出我们的配置文件供大家参考和借鉴

首先,给出 elasticsearch 的集群配置方法

  1. cluster:   
  2. name: ${CLUSTER_NAME}   
  3.  
  4. node:   
  5. master: ${NODE_MASTER}   
  6. data: ${NODE_DATA}   
  7. name: ${NODE_NAME}   
  8. ingest: ${NODE_INGEST}   
  9. max_local_storage_nodes: ${MAX_LOCAL_STORAGE_NODES}   
  10.  
  11. network.host: ${NETWORK_HOST}   
  12.  
  13. path:   
  14. data: /***/***   
  15. logs: /***/***   
  16.  
  17. bootstrap:   
  18. memory_lock: true   
  19.  
  20. http:   
  21. enabled: ${HTTP_ENABLE}   
  22. compression: true   
  23.     cors:   
  24. enabled: ${HTTP_CORS_ENABLE}   
  25. allow-origin: ${HTTP_CORS_ALLOW_ORIGIN}   
  26.  
  27. discovery:   
  28. zen:   
  29. ping.unicast.hosts: ${DISCOVERY_SERVICE}   
  30. minimum_master_nodes: ${NUMBER_OF_MASTERS} 

其次是配置 kibana,只需要提供 elasticsearch 的访问 url,就能直接与 elasticsearch 进行直接交互(如果配置了 x-pack 插件,还须提供相应的用户名以及密码才能访问)。

  1. server.host: "0.0.0.0"   
  2.  
  3. elasticsearch.url: "http://elasticsearch.default.svc.cluster.local:9200"   
  4.  
  5. elasticsearch.username: "******"   
  6. elasticsearch.password"******" 

***是配置 logstash 以及 filebeat

在 filebeat 中设置日志文件的路径,并在输入的日志数据上加上标签,方便 logstash 对日志进行分类,对不同的日志类型进行不同的处理。

  1. filebeat.prospectors: 
  2. - input_type: log 
  3.     paths: 
  4.         - /*****.log 
  5.         - /*****.log 
  6.     document_type: json_log 
  7.     tags: ["json-log""itrans"
  8.  
  9. output.logstash: 
  10.     hosts: ${LOGSTASH_HOSTS:?No logstash host configured. Use env var LOGSTASH_HOSTS to set hosts.} 
  11.  
  12. logging.level: info 
  13. logging.files: 
  14.     path: /home 
  15.     name: filebeat.log 

在这里,logstash 根据日志的标签,对不同类型的日志,执行不同的处理(如果配置了 x-pack 插件,还须提供相应的用户名以及密码才能访问)。

  1. input { 
  2.         beats { 
  3.                 port => 5043 
  4.                 congestion_threshold => 60 
  5.         } 
  6.  
  7. filter { 
  8.         if "json-log" in [tags] { 
  9.                 json { 
  10.                         source => "message" 
  11.                         remove_field => [ "message"
  12.                 } 
  13.                 mutate { 
  14.                         replace => { "type" => "json-log" } 
  15.                 } 
  16.         } 
  17.  
  18. output { 
  19.         if "json-log" in [tags] { 
  20.                 elasticsearch { 
  21.                         hosts => ["elasticsearch:9200"
  22.                         manage_template => false 
  23.                         index => "%{label}-%{ YYYY.MM.dd.HH}" 
  24.                         user => ****** 
  25.                         password => ****** 
  26.                 } 
  27.         } else { 
  28.                 elasticsearch { 
  29.                         hosts => ["elasticsearch:9200"
  30.                         manage_template => false 
  31.                         index => "unlabeled-%{ YYYY.MM.dd.HH}" 
  32.                         user => ****** 
  33.                         password => ****** 
  34.                 } 
  35.         } 

4.在 Kubernetes 上运行所需的 yaml 文件

想要实现 ELK 集群在 Kubernetes 上的运行自然少不了相应的 yaml 文件,我们使用的 yaml 文件主要参考了 kubernetes-elk-clusterkubernetes-elasticsearch-cluster等仓库。

原文链接:https://cloud.tencent.com/community/article/562397,作者:丁吕

【本文是51CTO专栏作者“腾讯云技术社区”的原创稿件,转载请通过51CTO联系原作者获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2020-06-11 09:00:59

ELKTB级监控

2022-08-30 08:41:51

日志文件FileBeat配置

2020-09-11 16:17:02

产品定价AI人工智能

2016-07-05 10:53:56

2010-06-09 08:39:34

2021-12-30 10:28:22

鸿蒙HarmonyOS应用

2010-04-07 16:50:41

双线解析DNS巧搭建

2021-05-01 20:36:01

随身WiFiWiFi网络

2011-12-29 11:57:08

WA2612无线信号

2020-05-18 12:04:17

PrometheusMySQL监控

2020-10-27 10:43:24

Redis字符串数据库

2019-12-26 09:52:33

Redis集群线程

2015-07-06 11:57:18

移动设备安全移动安全策略

2022-03-01 18:27:18

云原生日志监控

2021-10-20 18:46:45

人工智能AI无人机

2011-12-08 10:25:19

戴尔IT设备升级解决方案

2009-08-27 16:53:05

C# using作用

2020-08-06 14:36:24

Elasticsear集群运维

2010-08-13 09:50:53

桌面虚拟化
点赞
收藏

51CTO技术栈公众号