架构师日志平台elkstack实践(代码片段)

java1155 java1155     2022-12-05     698

关键词:

步骤 1. 理解 ELK Stack

0
 

在设置您自己的 ELK 堆栈之前,了解一点关于该堆栈及其组件的知识会对您有所帮助。

ELK Stack 由三个组件组成:LogstashElasticsearch 和 Kibana

Logstash 是一个用来管理日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 rabbitmq)和 jmx,它能够以多种方式输出数据,包括电子邮件、websockets 和 Elasticsearch。

Elasticsearch 是一种全文的、实时的搜索和分析引擎,它存储通过 Logstash 索引的日志数据。它构建于 Apache Lucene 搜索引擎库之上,通过 REST 和 Java api 来公开数据。Elasticsearch 是可扩展的,构建它是为了供分布式系统使用它。

Kibana 是一个基于 Web 的图形界面,用于搜索、分析和可视化存储在 Elasticsearch 指标中的日志数据。它利用 Elasticsearch 的 REST 接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

下图说明了如何使用 ELK Stack 组件从 IBM Bluemix 收集日志数据。

技术图片

点击查看大图

步骤 2. 安装 Logstash

0
 
  1. 从 Elasticsearch 下载站点(目前版本 1.4.2)的 Logstash 部分下载 logstash 核心下载 tar 文件。
  2. 为 Logstash 创建一个目标目录(例如,mkdir ~/logstash)。
  3. 将 tar 文件提取到目标目录:tar -xvfz logstash-1.4.2.tar.gz

步骤 3. 安装 Elasticsearch

0
 
  1. 从 Elasticsearch 下载站点(目前版本 1.4.3)的 Elasticsearch 部分下载 Elasticsearch 下载 tar 文件。
  2. 为 Elasticsearch 创建一个目标目录(例如,mkdir ~/elasticsearch)。
  3. 将 tar 文件提取到目标目录:tar -xvfz elasticsearch-1.3.4.tar.gz
  4. 要启动 Elasticsearch 进程,可以运行 bin/elasticsearch -d
  5. 要测试您的安装,可以运行 curl -X GET http://localhost:9200/

    如果安装成功,则会看到类似下面的内容:

    
    
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     
     
     
     
     
     
    ?
    "status" : 200,?
    "name" : "Thundra",?
    "version" : ?
    "number" : "1.3.4",?
    "build_hash" : "a70f3ccb52200f8f2c87e9c370c6597448eb3e45",?
    "build_timestamp" : "2014-09-30T09:07:17Z",?
    "build_snapshot" : false,?
    "lucene_version" : "4.9"?
    ,?
    "tagline" : "You Know, for Search"?
    ?

步骤 4. 配置 Logstash

0
 

要配置 Logstash,必须创建一个包含以下三个部分的配置文件:输入、过滤器和输出。

技术图片

输入部分

0
 

配置文件的第一部分定义了您的输入。输入是负责吸收数据的 Logstash 模块。 产品文档 中描述了有关输入的许多选项。在本教程中,我们将配置一个 TCP 输入,因为 Bluemix 使用了 TCP 协议来传输 syslog 数据。

过滤器部分

0
 

下一节将定义过滤器。过滤器是解析原始数据并将它们转换成具有更多结构的某种格式的模块。Logstash 有许多用来过滤数据的插件,其中最有用的插件之一是 grok。通过向常用模式分配标签,Grok 使得使用正则表达式来解析日志变得很容易。grok 模式的语法如下所示:
%PATTERN:IDENTIFIER

Logstash 过滤器包含一系列的 grok 模式,可以将各种日志消息匹配和分配给各种标识符,这就是为日志分配结构的方式。Logstash 提供了标准模式来匹配通用组件的日志格式,这些组件包括 Apache、syslog、mysql 和 redis。但是,也可以创建新的模式来匹配任何日志文件格式。在本教程中,我们将向您展示如何创建一个名为 custom 的新文件,并将它放在 Logstash 安装目录的 patterns 目录中。这个新文件将包含用来匹配 Bluemix 日志消息的 grok 模式。通过将此模式放在一个单独的文件中,您可以在 Logstash 过滤器中使用它。

阅读:了解有关针对 Logstash 的 grok 插件的更多信息

输出部分

0
 

配置文件的最后一部分定义了输出。输出是将已解析的数据传递给前提组件的模块。在本教程中,我们将向您展示如何配置输出,将日志数据发送到 Elasticsearch,以及如何将它们发送到控制台。

Logstash 配置

0
 
  1. 在 Logstash 安装目录的根目录中创建一个 log.conf 文件 ,并将以下代码复制到该文件中:

    点击查看代码清单

  2. 现在,在 logstash-1.4.2/patterns 目录中创建一个名为 custom 的自定义 grok 模式并复制以下代码:

    点击查看代码清单

  3. 要启动 Logstash,可以从 logstash 根目录运行以下命令:
    bin/logstash agent -f log.conf

步骤 5. 在 Bluemix 中创建一个日志输出服务

0
 
  1. 要在您的 Bluemix 应用程序上启用日志输出,需要为您的应用程序附加一个用户提供的服务,指定您的 ELK Stack 作为 syslog 输出。如果 Bluemix 上还没有应用程序,那么可以下载一个 样例 Java 应用程序
  2. 使用 CloudFoundry Command Line Interface 工具,创建一个用户提供的服务,指定 ELK Stack 实例作为 syslog 输出。使用以下命令:
    cf create-user-provided-service SERVICENAME -l syslog://HOST:PORT
    • SERVICENAME 是您想要对您的服务使用的名称。
    • HOST 是 Logstash 服务器的 IP 地址。
    • PORT 应该是 5000,如 Logstash 配置文件的输入部分中所配置的那样。
  3. 现在,将这个用户提供的服务实例附加到您想要发出以下命令来捕获其日志的应用程序:
    cf bind-service APPNAMESERVICENAME
    • APPNAME 是您想要附加日志服务的应用程序的名称。
    • SERVICENAME 是从前面的命令中获得的名称。
  4. 日志输出服务现在已被绑定到您的应用程序。需要使用此服务开始重新载入(restage)应用程序。使用 cf restage 命令立即执行此操作。

    现在,不但应该将 stdout 和 stderr 日志消息发送到 Logstash,还应该将有关您的应用程序的其他 Bluemix 事件发送到 Logstash。

阅读:使用第三方日志管理服务:了解有关在 Cloud Foundry 中创建日志输出的更多信息

阅读:用户提供服务实例:了解有关 Cloud Foundry 中用户提供的服务的更多信息

验证日志输出服务

0
 

要验证您刚才创建的日志输出服务能够正常工作,需要确保日志消息已被记录到 Logstash 控制台。通过重启 Bluemix 应用程序生成一些日志消息,然后查看 Logstash 控制台。如果一切工作正常,那么您应该会在控制台中看到如下所示的消息:

技术图片

点击查看大图

步骤 6. 在 Bluemix 上部署 Kibana 3

0
 
  1. 从 Elasticsearch 下载站点(当前版本 3.1.1)的 Kibana 部分,为您的操作系统下载适当的 Kibana 下载文件。
  2. 为 Kibana 创建一个目标目录,并将下载文件提取到该目录中。
  3. 从 Kibana 目标目录的根目录,在一个编辑器中打开 config.js 文件。
  4. 将 elasticsearch url 更改为指向您的 Elasticsearch 服务器(使用 IP_ADDRESS 的服务器 IP 地址和端口 9200): elasticsearch: "http://IP_ADDRESS:9200"
  5. 保存和关闭 config.js 文件。
  6. 在 Kibana 目标目录的根目录中,创建一个新的文件(manifest.yml),告诉 Bluemix 如何部署 Kibana。
  7. 将以下内容复制到 manifest.yml 文件中。manifest 文件表明 Bluemix 将会使用 nginx buildpack 来部署 Kibana。您可以根据需要更改 name 和 host 属性。
    
    
     
    1
    2
    3
    4
    5
     
     
     
     
     
     
     
     
    applications:?
    - name: kibana-in-bluemix?
    memory: 128M?
    host: kibana-in-bluemix?
    buildpack: https://github.com/cloudfoundry-community/nginx-buildpack.git?
  8. 保存和关闭 manifest.yml 文件。
  9. 使用 CloudFoundry Command Line Interface 工具,通过从 Kibana 目标目录发出 cf push命令将 Kibana 部署到 Bluemix。
  10. 将浏览器指向 Bluemix 中新的 Kibana 应用程序,例如:http://kibana-in-bluemix.mybluemix.net。

如果正确安装了 Kibana,则会看到类似下面的内容出现在您的浏览器中。

技术图片

点击查看大图

步骤 7. 创建一个自定义仪表板

0
 

要创建一个新的仪表板,请执行以下操作:

  1. 让您的浏览器指向: 
    http://IP_ADDRESS/index.html#/dashboard/file/blank.json 
    其中 IP_ADDRESS 是您的服务器的 IP 地址。技术图片

    点击查看大图

  2. 保存仪表板,这样您就不会再失去它。单击仪表板顶部的 Save 图标。技术图片
  3. 为仪表板提供一个惟一名称,比如 "tutorial"、"my dashboard" 或 "hello Kibana"。单击窗口外的任意地方来保存仪表板。技术图片

添加行和面板

0
 
  1. 我们要执行的第一个操作就是添加一个行,使用它作为面板的容器。单击右下角的 ADD A ROW。接下来,为该行提供一个标题(例如,"Corn Row")和一个高度(150px)。最后,单击 Create Row。技术图片
  2. 现在,您将看到已在 Rows 下列出的行。技术图片
  3. 要返回主仪表板,请单击 Save。现在,您有了一个空行,让我们向它添加一个面板。单击Add panel to empty row。技术图片

建立一个直方图

0
 
  1. 现在,您必须选择想要构建哪种类型的面板。让我们创建一个日志条目的直方图。从下拉列表中选择 histogram 开始。技术图片
  2. 有许多的选项,但这些选项不会让您不知所措。输入一个带有默认选项的标题(例如,“A brief histogram of time”),然后看看会发生什么。如果您愿意的话,可以自由选择更多的选项。技术图片

    点击查看大图

  3. 在准备好的时候单击 Save。默认的直方图应该如下所示。技术图片
  4. 我们绘制的图形还不错,就是稍微有点宽。要配置图形设置,请单击齿轮图标。技术图片
  5. 在 General 选项卡下,将跨度增加到 6。通过选择其他选项卡,您还可以访问更多的选项。技术图片
  6. 单击 Save 继续后面的操作。您应该获得类似下方的直方图:技术图片
  7. 在继续后面的操作之前,继续前进,单击右上角的 Save 图标保存仪表板。

添加一个时间过滤器

0
 
  1. 该仪表板是关于正确大小的仪表板,可视化不会告诉我们太多关于数据的信息。我们想要在短时间内查看数据。我们的仪表板的顶部应该如下所示:技术图片
  2. 选择 Time filter,此时会显示一个包含几个时间段的下拉菜单。在这里,我们选择了 Last 24h,但您可以选择您认为适用于您的日志数据的任何时间范围。技术图片
  3. 这导致对仪表板执行两处更改。首先,直方图看起来有所不同,因为它现在显示了不同时间跨度的数据。此外,一个新的过滤器被添加到了过滤部分。技术图片
  4. 在继续后面的操作之前,再次保存仪表板。

添加一个表面板

0
 
  1. 这样,在日志到达的时候,您就可以查看时间,放入一个包含所有个人日志记录的表格。为此,首先需要添加一个新行,将面板放入该行中。再次单击 ADD A ROW,添加一个包含您选择的名称的行。向该行添加一个新面板,但这次选择 table。技术图片

    让我们为它分配一个标题(例如,Log records),并将跨度更改为 12,但保持其他选项的默认值。然后单击 Save。现在,向下滚动现有的直方图,您应该能够看到所有日志记录。

    技术图片

    点击查看大图

  2. 有大量信息需要处理,但是您可以通过单击单个日志记录来查看其详细信息。技术图片
  3. 再次声明,在继续后面的操作之前保存仪表板。

添加过滤器

0
 
  1. 您已经见过一个 Time 过滤器,但让我们来尝试应用您自己的自定义过滤器。查看我们放入表中的数据,您可以看到,拥有 [App/0] 的日志记录是将通过我们的 Bluemix 应用程序记录的消息,但其他记录拥有其他的标识符,比如 [RTR]。RTR 记录实际上是通过 Bluemix 路由器进行记录的。技术图片

    点击查看大图

  2. 让我们来筛选这些消息。要添加一个过滤器,请单击现有时间过滤器旁边的加号。技术图片
  3. 您可以选择使用 must、mustNot 或 either。让我们使用 mustNot 筛选出包含查询 RTR 的所有消息。技术图片
  4. 单击 Apply 并注意那些 RTR 消失了的日志消息。在继续后面的操作之前保存仪表板。

创建查询

0
 
  1. 现在,您已经有了几个面板,让我们来使用一些查询。查看数据表,您会注意到,有一些format 字段的值为 cf 的记录。技术图片
  2. 将符合标准的记录和不符合标准的记录进行比较。首先,您需要查询 format 字段的值为 cf的应用程序。查询某个特定字段,按照模式 "field_name:value" 进行查询。找到带有绿点和类型为 format:cf 的查询框,如下所示:技术图片
  3. 按下 Enter 并观察直方图的变化方式,因为只显示了格式为 cf 的记录。技术图片
  4. 现在,添加另一个查询,选择格式不为 cf 的记录。通过执行此操作,可以有效地将数据分隔成相反的类别。首先单击 format:cf 查询右边的加号图标,创建另一个查询。此查询的颜色将是橙色的。接下来,将 NOT format:cf 输入到新查询中。技术图片
  5. 再次按下 Enter 来查看直方图的变化方式。技术图片
  6. 这是不是很有趣?现在,您了解了修改 Kibana 仪表板的基础知识,并为探索 Kibana 提供的所有功能做好了准备。尝试应用一些查询,添加不同类型的面板,并调整面板提供的许多选项。

阅读:Kibana 简介:了解关于 Kibana 的更多信息

阅读:Kibana 3 文档:访问 Kibana 3 上的 Elasticsearch 官方文档

阅读:Kibana 3: milestone 4:从关于 3.4 版本的 Elasticsearch 博客中了解关于 Kibana 3 特性的更多信息

生成环境注意事项

0
 

我们目前为止介绍的所有内容都很有用,在开始使用 ELK Stack 为您的 IBM Bluemix 应用程序 汇集日志时,需要掌握这些知识。不过,当您在生产环境中使用此解决方案时,仍有一些问题需要解决,这些问题的详细介绍已超出了本文的讨论范围。这些问题可以确保您数据的安全和删除过时的日志。

安全性

0
 

如果您在生产环境中使用 ELK Stack,则应该采用适当的凭证,使用最佳实践来运行 Logstash Elasticsearch 作为守护进程服务。

要保护 Kibana,可以配置您的 Web 服务器来限制用户访问,或者可以探索第三方产品,比如https://github.com/christian-marie/kibana3_auth。此外,可以参考以下两个参考资料,获得关于安全性的更多信息。

阅读:生成部署:了解关于保障 Elasticsearch 安全的更多信息。

阅读:Logstash 的官方文档包含有关安全性的其他信息和各种配置选项。

删除旧的记录(可选)

0
 

现在,您已经将所有日志通过 Logstash 集中到了 Elasticsearch 中,如何删除已经不再有用、只会占用索引中的空间和内存的旧记录呢?处理这个问题的一个方法是使用一个名为 Curator的 Elasticsearch 工具,它有助于您使用简单的命令来管理时间序列指数,这些命令包括deleteoptimizeclosesnapshot 和 alias

下面的指令可以帮助您开始了解 Curator,创建一个将处理清除工作的 cron 作业。

  1. 安装 pip:sudo apt-get install python-pip
  2. 使用 pip 安装 Curator:sudo pip install elasticsearch-curator
  3. 编辑 crontab:crontab -e
  4. 创建两个 cron 作业,一个用于删除超过 120 天的指数:

 
1
 
 
 
 
 
 
 
 
20 0 * * * /usr/local/bin/curator --host 127.0.0.1 delete --older-than 120?

另一个作业用于关闭超过 90 天的指数:


 
1
 
 
 
 
 
 
 
 
20 0 * * * /usr/local/bin/curator --host 127.0.0.1 close --older-than 90?

结束语

0
 

ELK Stack 使得开发人员能够捕获、转换、分析和可视化应用程序的日志,最终使他们能够从应用程序中获得新的洞察。此外,ELK Stack 可以接收来自各种来源的日志数据,支持开发一个堆栈,集成来自整个企业的应用程序产品组合的数据。

devops架构师--02kubernetes落地实践之旅(代码片段)

...ubernetes落地实践之旅纯容器模式的问题容器调度管理平台架构图核心组件工作流程架构设计的几点思考实践--集群安装k8s集群主流安装方式对比分析核心组件理解集群资源kubectl的使用实践--使用k8s管理业务应用最小调度单元Pod为... 查看详情

亿级elk日志平台构建实践(代码片段)

...来。换句话说:Filebeat就是新版的Logstash-fowarder,也会是ELKStack在Agent的第一选择。Kafka:数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力... 查看详情

亿级日志平台实践(代码片段)

...」废话不多说,老司机们座好了,我们准备发车了~~~整体架构整体架构主要分为4个模块,分别提供不同的功能Filebeat:轻量级数据收集引擎。基于原先Logstash-fowarder的源码改造出来。换句话说:Filebeat就是新版的Logsta 查看详情

elk日志平台搭建(代码片段)

...据收集引擎。基于原先Logstash-fowarder的源码改造出来。是ELKStack在Agent的第一选择。<br><br>Kafka:数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶... 查看详情

devops架构师--03kubernetes进阶实践(代码片段)

文章目录第三天Kubernetes进阶实践ETCD常用操作Kubernetes调度为何要控制Pod应该如何调度调度的过程CordonNodeSelectornodeAffinity污点(Taints)与容忍(tolerations)Kubernetes集群的网络实现CNI介绍及集群网络选型,Flannel网络模... 查看详情

apisix在君润人力云原生平台的架构实践(代码片段)

讲师:袁鹏,一页科技架构师摘要:君润人力采用多套ApacheAPISIX集群来满足自研服务平台的功能需求。君润人力成立于2019年,是一家以科技驱动的人力资源解决方案服务商,依托行业领先的科技水平和服务能... 查看详情

elk日志分析系统实践(代码片段)

一、ELK介绍官网:https://www.elastic.co/cn/中文指南https://legacy.gitbook.com/book/chenryn/elk-stack-guide-cn/detailsELKStack(5.0版本后)-->ElasticStack相当于ELKStack+BeatsELKStack包含:Elaticsearch、Logstash、KibanaElas 查看详情

集中式日志分析平台elasticstack(部署)(代码片段)

...构选型接下来我们进行初步的探视,利用测试环境体验下ELKStack+Filebeat,测试环境我们就不进行Kafka的配置了,因为他的存在意义在于提高可靠性。2、软件版本Filebeat6.4.0Logstash6.4.0Elasticsearch6.4.0Kibana6.4.0JDK1.8.0_1813、服务器准备IP系... 查看详情

elk架构和filebeat工作原理详解(代码片段)

ELKStack简介ELK不是一款软件,而是Elasticsearch、Logstash和Kibana三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于Elastic.co公司名下,所以被简称为ELKStack。根据GoogleTrend的信息显示࿰... 查看详情

事件驱动架构在vivo内容平台的实践(代码片段)

作者:vivo互联网服务器团队-GaoXiang一、什么是事件驱动架构当下,随着微服务的兴起,容器化技术的发展,以及云原生、serverless概念的普及,事件驱动再次引起业界的广泛关注。所谓事件驱动的架构,也就是使用事件来实现跨... 查看详情

成为架构师课程系列一线架构师:6个经典困惑及其解法(代码片段)

 目录 一线架构师:6个经典困惑及其解法 多阶段还是多视图?内置最佳实践架构方法论:3个阶段,一个贯穿 Pre-architecture阶段:ADMEMS矩阵方法ConceptualArchitecture阶段:重大需求塑造做概念架构RefinedArchitecture阶段:落... 查看详情

devops架构师--04kubernetes集群的日志及监控-更新版

文章目录第四天Kubernetes集群的日志及监控k8s日志收集架构使用节点级日志代理使用sidecar容器和日志代理方式一:sidecar容器将应用程序日志传送到自己的标准输出。方式二:sidecar容器运行一个日志代理,配置该日志代理以便从... 查看详情

乐刻大数据平台架构实践(代码片段)

乐刻运动大数据是基于hadoop体系搭建的,主要满足运营的日常报表,以及公司核心指标为主。随着2016年线上线下的发力,以智能化健身为主的共享经济的提出,数据需求量大幅的激增,数据从最初的GB级到现... 查看详情

elasticsearch+logstash+filebeat+kibana搭建elk日志分析平台(官方推荐的beats架构)

...它,就可将bug们统统消化在自己手里。当然了,作为一个架构师搭建动手搭建一个日志平台也基本是必备技能了,虽然我们说架构师基本不咋写代码了,但是如果需要的时候,还是能扛枪的​​​​ELK部署应用与工作机制3.1ELK日... 查看详情

一位云架构师用服务打动客户的故事之六(阿里云上的msp最佳实践项目分享)(代码片段)

最近找了一个典型的云服务客户的案例对内进行分享,今天把核心内容脱敏后分享出来。希望能给目前在路上(做云服务MSP)的同行,有一些借鉴意义或者帮助。该用户据全年跟进情况,目前该客户距正式启用我们公司云服务(... 查看详情

elkstack集群架构设计

一、ELKStack介绍与入门实践二、Elasticsearch集群架构图 服务器配置:Centos6.6x86_64CPU:1核心MEM:2G(做实验,配置比较低一些)注:这里配置elasticsearch集群用了3台服务器,可以根据自己的实际情况进行调整。三、开始安装配置n... 查看详情

日志采集最佳实践(代码片段)

...启用日志采集与基础用法,参考官方文档日志采集。技术架构是怎样的?TKE集群开启日志采集后,tke-log-agent作为DaemonSet部署在每个节点上,负责根据采集 查看详情

elk日志分析平台架构剖析和常见问题(代码片段)

一、什么是ELFK1、ELK已经成为目前最流行的集中式日志解决方案,分别表示:Elasticsearch,Logstash,Kibana,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上... 查看详情