在IBM Bluemix中 ,应用程序实例可以随时消失,例如,当应用程序重新启动或移至其他主机时,这将导致调试困难。 除了应用程序的日志消息之外,Bluemix记录的事件数据(对于故障诊断也可能会有所帮助)也在短暂中。 在尝试确定服务器或应用程序出现问题时,集中化应用程序日志记录很有用,因为它使您可以在一个地方搜索所有日志。 它也很有用,因为它使您可以通过在特定时间范围内关联多个服务器的日志来确定跨多个服务器的问题。 在本教程中,我们向您展示如何使用ELK堆栈的组件(Elasticsearch,Logstash和Kibana)不仅为持久性日志提供集中位置,而且还可以对日志数据进行分析和可视化。
“将日志放在一个地方可以让您搜索它们,并可能获得对应用程序以前未知的见解。 它还可以帮助您可视化各种指标,例如谁在访问应用程序以及使用最多的部分。 ”
在本教程中,我们介绍了安装和配置ELK Stack组件所需的步骤。 我们将说明如何在单独的Ubuntu服务器上安装Elasticsearch和Logstash,如何创建Bluemix服务以充当Bluemix应用程序的日志消耗以及如何使用nginx Web服务器buildpack在Bluemix中部署Kibana。 最后,我们介绍了在Kibana中创建自定义仪表板以可视化日志数据的基础。
你需要什么
- 一个Ubuntu服务器(我们使用14.04 LTS版本),其IP地址对您的Bluemix应用程序可见。 (如果您无权访问Ubuntu服务器,请遵循“ 预配SoftLayer服务器[可选]”下的说明。)
- Java
sudo apt-get install openjdk-7-jre
- 为端口5000、5514和9200打开的防火墙
- 熟悉使用CloudFoundry命令行界面推送Bluemix应用程序
设置SoftLayer服务器(可选)
如果您无权访问Ubuntu服务器,请使用以下步骤配置SoftLayer服务器:
- 输入您的帐户和账单信息,在SoftLayer注册页面上注册免费试用版。
- 在“ 配置服务器”部分中,选择所需的数据中心,主机名和域名。 对于操作系统,选择Ubuntu Linux 14.04 LTS Trusty Tahr –最小安装(64位) 。
- 设置服务器后,请在https://control.softlayer.com/devices/的设备列表中查看它。 记下您的公共IP地址。
- 要通过SSH进入服务器,您必须确定帐户信息,该信息可在https://control.softlayer.com/devices/passwords中找到。 将鼠标悬停在密码上可以查看或更改密码。
- 现在您知道root的密码,您可以使用首选方法通过SSH进入SoftLayer服务器。 要设置SSH密钥,请参阅SoftLayer文档中的SSH密钥页面。
步骤1.了解ELK堆栈
在设置自己的ELK堆栈之前,先了解一下它及其组件是很有帮助的。
ELK堆栈包含三个组件: Logstash , Elasticsearch和Kibana 。
Logstash是用于管理日志的工具。 它几乎支持任何类型的日志,包括系统日志,错误日志和自定义应用程序日志。 它可以从许多来源接收日志,包括syslog,消息传递(例如,rabbitmq)和jmx,并且可以通过多种方式输出数据,包括电子邮件,websocket和Elasticsearch。
Elasticsearch是一个全文本实时搜索和分析引擎,用于存储由Logstash索引的日志数据。 它基于Apache Lucene搜索引擎库构建,并通过REST和Java API公开数据。 Elasticsearch具有可伸缩性,旨在供分布式系统使用。
Kibana是基于Web的图形界面,用于搜索,分析和可视化Elasticsearch索引中存储的日志数据。 它利用Elasticsearch的REST接口检索数据,不仅使用户能够为其数据创建自定义的仪表板视图,而且还允许他们以临时方式查询和过滤数据。
下图说明了如何使用ELK Stack组件从IBM Bluemix收集日志数据。
步骤2.安装Logstash
- 从Elasticsearch下载站点的Logstash部分下载Logstash核心下载tar文件(当前版本1.4.2)。
- 为Logstash创建一个目标目录(例如,
mkdir ~/logstash
)。 - 将tar文件解压缩到目标目录:
tar -xvfz logstash-1.4.2.tar.gz
。
步骤3.安装Elasticsearch
- 从Elasticsearch下载站点 (当前版本1.3.4)的Elasticsearch部分下载Elasticsearch下载tar文件。
- 为Elasticsearch创建目标目录(例如,
mkdir ~/elasticsearch
)。 - 将tar文件解压缩到目标目录:
tar -xvfz elasticsearch-1.3.4.tar.gz
。 - 要启动Elasticsearch进程,请运行
bin/elasticsearch
-d
。 - 要测试安装,请运行
curl -X GET http://localhost:9200/
如果安装成功,您应该会看到类似以下内容:
{ "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
要配置Logstash,必须创建一个包含三个部分的配置文件:输入,过滤器和输出。
输入部分
配置文件的第一部分定义了您的输入。 输入是Logstash的模块,负责获取数据。 产品文档中介绍了围绕此输入的许多选项。 在本教程中,我们将配置一个TCP输入,因为这是Bluemix用来传输syslog数据的协议。
过滤器部分
下一节将定义过滤器。 筛选器是用于将原始数据解析并将其转换为具有更多结构的格式的模块。 Logstash有许多可用于过滤的插件,其中最有用的插件是grok 。 通过将标签分配给常用模式,Grok使使用正则表达式解析日志变得容易。 grok模式的语法为:
%{PATTERN:IDENTIFIER}
Logstash过滤器包括一系列grok模式,这些模式匹配并分配日志消息的各个部分给各种标识符,这就是给定日志结构的方式。 Logstash提供了与常用组件(例如Apache,syslog,mysql和redis)的日志格式匹配的标准模式。 但是,也可以创建与任何日志文件格式匹配的新模式。 在本教程中,我们将向您展示如何创建一个名为custom的新文件并将其放置在Logstash安装中的patterns目录中。 这个新文件将包含与Bluemix日志消息匹配的grok模式。 通过将此模式放在单独的文件中,您将可以在Logstash过滤器中使用它。
输出部分
配置文件的最后一部分定义了输出。 输出是将解析的数据传递到其他组件的模块。 在本教程中,我们向您展示如何配置输出以将日志数据发送到Elasticsearch和控制台。
Logstash配置
- 在Logstash安装的根目录中创建一个log.conf文件,并将以下代码复制到其中:
input { tcp { port => 5000 type => syslog } } filter { grok { match => { "message" => "%{SYSLOG5424PRI}%{NONNEGINT:syslog5424_ver} +(?:%{TIMESTAMP_ISO8601:syslog5424_ts}|-) +(?:%{HOSTNAME:syslog5424_host}|-) +(?:%{NOTSPACE:app_id}|-) +(?:%{NOTSPACE:syslog5424_proc}|-) +(?:%{WORD:syslog5424_msgid}|-) +(?:%{SYSLOG5424SD:syslog5424_sd}|-|) +%{CLOUDFOUNDRYAPP:syslog5424_msg}" } add_field => { "format" => "cf" } } } output { elasticsearch { host => localhost protocol => http } stdout { codec => rubydebug } }
- 现在,在logstash-1.4.2 / patterns目录中为名为custom的自定义grok模式创建文件,并复制以下代码:
CLOUDFOUNDRYAPP %{NOTSPACE:domain} - \[%{NOTSPACE:timex} %{NOTSPACE:milis}\] "%{HTTPMETHOD:httpmethod} %{PATH:path} %{NOTSPACE:protocol}" %{INT:response_code} %{INT:not_sure_todo} HTTPMETHOD (GET|PUT|POST|DELETE)
- 要启动Logstash,请从logstash根目录运行以下命令:
bin/logstash agent -f log.conf
步骤5.在Bluemix中创建日志清除服务
- 要在您的Bluemix应用程序上启用日志清除,您需要将用户提供的服务附加到您的应用程序,该服务将您的ELK Stack指定为系统日志清除。 如果您尚未在Bluemix上安装应用程序,则可以下载示例Java应用程序 。
- 使用CloudFoundry命令行界面工具,创建一个用户提供的服务,该服务指向ELK Stack实例作为系统日志消耗。 使用以下命令:
cf create-user-provided-service SERVICENAME -l syslog:// HOST : PORT
- 您要为
SERVICENAME
命名服务。 -
HOST
是您的Logstash服务器的IP地址。 -
PORT
应该是5000,如Logstash配置文件的输入部分中所配置。
- 您要为
- 现在,通过发出以下命令,将此用户提供的服务实例附加到要捕获其日志的应用程序:
cf bind-service APPNAME SERVICENAME
-
APPNAME
是您要将日志记录服务附加到的应用程序的名称。 -
SERVICENAME
是上一个命令的名称。
-
- 日志清除服务现已绑定到您的应用程序。 需要重新启动该应用才能开始使用此服务。 要立即执行此操作,请使用
cf restage
命令。现在,不仅应该将您的stdout和stderr日志消息发送到Logstash,而且有关您应用程序的其他Bluemix事件也应该发送给Logstash。
验证日志清除服务
要验证刚刚创建的日志耗尽服务是否正常运行,您需要确保将日志消息记录到Logstash控制台中。 通过重新启动Bluemix应用程序来生成一些日志消息,然后观察Logstash控制台。 如果一切正常,您应该在控制台中看到如下消息:
步骤6.在Bluemix上部署Kibana 3
- 从Elasticsearch下载站点的“ Kibana”部分(当前版本3.1.1)下载适合您的操作系统的Kibana下载文件。
- 为Kibana创建目标目录,并将下载文件解压缩到其中。
- 从Kibana目标目录的根目录中,在编辑器中打开config.js文件。
- 更改elasticsearch网址以指向您的Elasticsearch服务器(使用服务器的IP地址用于IP_ADDRESS和端口9200):
elasticsearch: "http:// IP_ADDRESS :9200"
。 - 保存并关闭config.js文件。
- 在Kibana目标目录的根目录中,创建一个新文件manifest.yml,以告诉Bluemix如何部署Kibana。
- 将以下内容复制到manifest.yml文件中。 清单文件指示Bluemix使用nginx buildpack部署Kibana。 您可以根据需要更改
name
和host
属性。applications: - name: kibana-in-bluemix memory: 128M host: kibana-in-bluemix buildpack: https://github.com/cloudfoundry-community/nginx-buildpack.git
- 保存并关闭manifest.yml文件。
- 使用CloudFoundry命令行界面工具,通过从Kibana目标目录发出
cf push
命令,将Kibana部署到Bluemix。 - 将浏览器指向Bluemix中新的Kibana应用程序,例如:http://kibana-in-bluemix.mybluemix.net。
如果正确安装了Kibana,您应该在浏览器中看到类似于以下内容。
步骤7.创建一个自定义仪表板
要创建新的仪表板,请执行以下操作:
- 将浏览器指向:
http:// IP_ADDRESS /index.html#/dashboard/file/blank.json
其中IP_ADDRESS是服务器的IP地址。 - 保存仪表板,以免丢失。 单击仪表板顶部的“ 保存”图标。
- 给仪表板起一个名字,诸如“教程”或“我的仪表板”或“ hello Kibana”之类的唯一名称。 单击窗口外的任何位置以保存仪表板。
添加行和面板
- 首先要做的是添加一行,它将作为面板的容器。 点击右下角添加一行 。 接下来,为您的行指定标题(例如“玉米行”),并将其高度设置为150px。 最后,点击创建行 。
- 现在,您应该看到“行”下列出的行 。
- 要返回主仪表板,请点击保存 。 现在您有一个空行,因此让我们为其添加一个面板。 单击“ 将面板添加到空行” 。
建立直方图
- 现在,您必须选择要构建的面板类型。 让我们创建一段时间内日志条目的直方图。 首先从下拉列表中选择直方图 。
- 有很多选择,但不要被淹没。 只需输入带有默认选项的标题(例如,“时间的简短直方图”),然后看看会发生什么。 如果您愿意,可以随意选择更多选项。
- 准备好后,单击“ 保存” 。 您的默认直方图应如下所示。
- 看起来不错,但是让我们将图扩大一点。 要配置图表设置,请点击齿轮图标。
- 在“ 常规”选项卡下,将跨度增加到6。您还可以通过选择其他选项卡来访问更多选项。
- 单击保存以继续。 您应该具有以下内容:
- 在继续之前,请单击右上角的“ 保存”图标以保存仪表板。
添加时间过滤器
- 仪表板的大小合适,但是可视化并不能告诉我们很多有关数据的信息。 我们希望在较短的时间内查看数据。 仪表板的顶部应如下所示:
- 选择时间过滤器 ,这将显示一个包含多个时间段的下拉菜单。 在这里,我们选择了Last 24h ,但是您可以选择您认为适合日志数据的任何时间范围。
- 这将导致仪表板发生两次更改。 首先,直方图看起来有所不同,因为它现在显示不同时间范围内的数据。 另外,新的过滤器将添加到过滤部分。
- 在继续之前,请再次保存仪表板。
添加表格面板
- 为了让您看到日志到达的时间,将其与所有单个日志记录一起放在一个表中。 为此,您首先需要添加新行以将面板放入其中。 再次单击添加一行 ,并添加一行您选择的名称。 在该行添加一个新面板,但这一次选择table 。
让我们为其分配一个标题(例如,日志记录),并将范围更改为12,但保留其余的默认选项。 然后点击保存 。 现在向下滚动到现有直方图下方,您应该能够看到所有日志记录。
- 这需要处理很多信息,但是您可以通过单击查看单个日志记录的详细信息。
- 再次,保存仪表盘,然后继续。
添加过滤器
- 您已经看到了时间过滤器,但让我们尝试应用自己的自定义过滤器。 查看表中的数据,您可以看到具有
[App/0]
的日志记录是Bluemix应用程序正在记录的消息,但是其他记录具有其他标识符,例如[RTR]
。 RTR记录实际上是由Bluemix路由器记录的。 - 让我们过滤掉这些消息。 要添加过滤器,请单击现有时间过滤器旁边的加号。
- 您可以选择使用must , mustNot或两者之一 。 让我们使用mustNot过滤掉包含查询RTR的所有消息。
- 单击“ 应用” ,注意到带有RTR的日志消息消失了。 在继续之前,请保存仪表板。
创建查询
- 现在您已经有了几个面板,让我们使用一些查询。 查看数据表,请注意,有些记录的字段格式为
cf
- 将符合此条件的记录与不符合此条件的记录进行比较。 首先,您需要查询格式为
cf
应用程序。 要查询特定字段,请遵循“ field_name:value”模式。 找到带有绿点的查询框,然后输入format:cf
,如下所示: - 按Enter键并观察直方图的变化,因为仅显示
cf
格式的记录。 - 现在,添加第二个查询,以选择不具有
cf
格式的记录。 通过这样做,您可以有效地将数据分为相反的类别。 首先单击format:cf
查询右侧的加号图标以创建第二个查询。 该查询的颜色将为橙色。 接下来,在新查询中输入NOT format:cf
。 - 按Enter键以查看直方图如何再次更改。
- 在那里,那不是很有趣吗? 既然您了解了修改Kibana仪表板的基础知识,就可以开始探索Kibana所提供的所有内容。 尝试应用更多查询,添加不同类型的面板,并调整面板提供的许多选项。
生产环境注意事项
到目前为止,我们所涉及的一切都是使用ELK Stack为IBM Bluemix应用程序启动集中式日志记录所需要的。 但是,在生产环境中使用此解决方案之前,有两个问题需要解决,其详细信息不在本文讨论范围之内。 这些问题正在保护您的数据并修剪过时的日志。
安全
如果在生产中使用ELK堆栈,则应使用最佳做法,以具有适当凭据的Logstash和Elasticsearch作为守护程序服务运行。
为了保护Kibana,可以将Web服务器配置为限制用户访问,也可以浏览第三方产品,例如https://github.com/christian-marie/kibana3_auth 。 另外,请参考以下两个资源以获取有关安全性的更多信息。
删除旧记录(可选)
现在您已将所有日志通过Logstash飞入Elasticsearch,如何删除不再消耗索引和内存空间的旧记录? 解决此问题的一种方法是使用一种称为Curator的Elasticsearch工具,该工具可帮助您使用简单的命令来管理时间序列索引,例如: delete
, optimize
, close
, snapshot
和alias
。
以下说明将通过创建将处理清理的cron作业来帮助您使用Curator。
- 安装pip:
sudo apt-get install python-pip
。 - 使用pip安装Curator:
sudo pip install elasticsearch-curator
。 - 编辑crontab:
crontab -e
。 - 创建两个cron作业,一个删除超过120天的索引:
20 0 * * * /usr/local/bin/curator --host 127.0.0.1 delete --older-than 120
并关闭90天以上的指数:
20 0 * * * /usr/local/bin/curator --host 127.0.0.1 close --older-than 90
结论
IBM Bluemix使开发人员可以快速构建,部署和管理云应用程序,同时利用不断发展的可用服务和运行时框架生态系统。 同时,Bluemix要求开发人员重新考虑他们开发应用程序的方法,包括如何处理日志文件。 通过利用Bluemix的日志清除功能,ELK Stack使开发人员能够捕获,转换,分析和可视化其应用程序的日志,最终使他们能够获得有关其应用程序的新见解。 另外,ELK Stack不仅仅限于Bluemix应用程序;它还可以用于其他方面。 它可以从各种来源接收日志数据,从而能够开发单个堆栈,从而能够集成来自企业应用程序组合的数据。
翻译自: https://www.ibm.com/developerworks/analytics/library/ba-bluemix-elklog/index.html