使用 ELK Stack 集中 IBM Bluemix 应用程序日志(2)
 
- UID
- 1066743
|

使用 ELK Stack 集中 IBM Bluemix 应用程序日志(2)
步骤 3. 安装 Elasticsearch- 从 (目前版本 1.4.3)的 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/。如果安装成功,则会看到类似下面的内容:
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要配置 Logstash,必须创建一个包含以下三个部分的配置文件:输入、过滤器和输出。
输入部分配置文件的第一部分定义了您的输入。输入是负责吸收数据的 Logstash 模块。 中描述了有关输入的许多选项。在本教程中,我们将配置一个 TCP 输入,因为 Bluemix 使用了 TCP 协议来传输 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 文件 ,并将以下代码复制到该文件中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 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 模式并复制以下代码:
1
2
| 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 作为 syslog 输出。如果 Bluemix 上还没有应用程序,那么可以下载一个 。
- 使用 CloudFoundry Command Line Interface 工具,创建一个用户提供的服务,指定 ELK Stack 实例作为 syslog 输出。使用以下命令:
cf create-user-provided-service SERVICENAME -l syslog://HOST:PORT- SERVICENAME 是您想要对您的服务使用的名称。
- HOST 是 Logstash 服务器的 IP 地址。
- PORT 应该是 5000,如 Logstash 配置文件的输入部分中所配置的那样。
- 现在,将这个用户提供的服务实例附加到您想要发出以下命令来捕获其日志的应用程序:
cf bind-service APPNAMESERVICENAME- APPNAME 是您想要附加日志服务的应用程序的名称。
- SERVICENAME 是从前面的命令中获得的名称。
- 日志输出服务现在已被绑定到您的应用程序。需要使用此服务开始重新载入(restage)应用程序。使用 cf restage 命令立即执行此操作。现在,不但应该将 stdout 和 stderr 日志消息发送到 Logstash,还应该将有关您的应用程序的其他 Bluemix 事件发送到 Logstash。
验证日志输出服务要验证您刚才创建的日志输出服务能够正常工作,需要确保日志消息已被记录到 Logstash 控制台。通过重启 Bluemix 应用程序生成一些日志消息,然后查看 Logstash 控制台。如果一切工作正常,那么您应该会在控制台中看到如下所示的消息:
 |
|
|
|
|
|