本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置 Elasticsearch 日志
Amazon ES 通过 Elasticsearch 公开四个 Amazon CloudWatch Logs 日志:错误日志、搜索慢速日志、索引慢速日志和审核日志。搜索慢速日志、索引慢速日志和错误日志对于解决性能和稳定性问题非常有用。审核日志跟踪用户活动以实现合规性目的。默认情况下,所有日志都已禁用。如果启用,则应用标准 CloudWatch 定价
错误日志仅可用于 Elasticsearch 版本 5.1 和更高版本。慢速日志可用于所有 Elasticsearch 版本。
对于其日志,Elasticsearch 使用 Apache Log4j 2TRACE
、DEBUG
、INFO
、WARN
、ERROR
和 FATAL
。
如果您启用错误日志,Amazon ES 会将 WARN
、ERROR
和 FATAL
的日志行发布到 CloudWatch。Amazon ES 还会从 DEBUG
级别发布几个异常,其中包括:
-
org.elasticsearch.index.mapper.MapperParsingException
-
org.elasticsearch.index.query.QueryShardException
-
org.elasticsearch.action.search.SearchPhaseExecutionException
-
org.elasticsearch.common.util.concurrent.EsRejectedExecutionException
-
java.lang.IllegalArgumentException
错误日志在许多情况下有助于诊断,包括:
-
Painless 脚本编译问题
-
无效的查询
-
索引问题
-
快照失败
启用日志发布(控制台)
Amazon ES 控制台是启用将日志发布到 CloudWatch 的最简单方法。
启用将日志发布到 CloudWatch(控制台)
-
转至 https://aws.amazon.com
,然后选择 Sign In to the Console (登录控制台)。 -
在 Analytics 下,选择 Elasticsearch Service。
-
在导航窗格中的 My domains (我的域) 下,选择要更新的域。
-
在 Logs 选项卡上,为所需日志选择 Enable。
-
创建 CloudWatch 日志组,或选择现有日志组。
注意 如果计划启用多个日志,建议将它们发布到相应的日志组。这样分开更便于进行日志扫描。
-
选择一个包含适当权限的访问策略,或使用控制台提供的 JSON 创建策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "
cw_log_group_arn
" } ] }重要 CloudWatch Logs 支持每个区域 10 个资源策略。如果您计划针对若干 Amazon ES 域启用日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。有关更新您的策略的步骤,请参阅启用日志发布 (AWS CLI)。
-
选择启用。
您的域状态将从 Active 更改为 Processing。在启用日志发布之前,必须重新回到 Active 状态。此项更改通常需要 30 分钟,但可能需要更长时间,具体取决于您的域配置。
如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您启用了审核日志,请参阅审核日志 Kibana UI。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。
启用日志发布 (AWS CLI)
您需要有一个 CloudWatch 日志组,才能启用日志发布。如果还没有日志组,可以使用以下命令创建一个:
aws logs create-log-group --log-group-name
my-log-group
输入下一命令查找日志组的 ARN,然后将它记下来:
aws logs describe-log-groups --log-group-name
my-log-group
现在,可以为 Amazon ES 授予日志组写入权限。您必须在命令结尾处提供日志组的 ARN:
aws logs put-resource-policy --policy-name my-policy --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com"}, "Action":[ "logs:PutLogEvents","logs:PutLogEventsBatch","logs:CreateLogStream"],"Resource": "
cw_log_group_arn
"}]}'
CloudWatch Logs 支持每个区域 10 个资源策略。如果您计划针对若干 Amazon ES 域启用慢速日志,应创建并重用包含多个日志组的更宽泛的策略,以避免达到此限制。
如果您以后需要查看此策略,请使用 aws logs
describe-resource-policies
命令。要更新策略,请发出带有新策略文档的相同 aws
logs put-resource-policy
命令。
最后,可以使用 --log-publishing-options
选项来启用发布。该选项的语法与 create-elasticsearch-domain
和 update-elasticsearch-domain-config
命令相同。
参数 | 有效值 |
---|---|
--log-publishing-options |
SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn= |
INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn= |
|
ES_APPLICATION_LOGS={CloudWatchLogsLogGroupArn= |
|
AUDIT_LOGS={CloudWatchLogsLogGroupArn= |
如果计划启用多个日志,建议将它们发布到相应的日志组。这样分开更便于进行日志扫描。
示例
下面的示例对指定域启用搜索和索引慢速日志的发布:
aws es update-elasticsearch-domain-config --domain-name my-domain --log-publishing-options "SEARCH_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true},INDEX_SLOW_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-other-log-group,Enabled=true}"
要禁用到 CloudWatch 的发布,请在 Enabled=false
的情况下运行同一命令。
如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您启用了审核日志,请参阅审核日志 Kibana UI。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。
启用日志发布 (AWS SDKs)
您必须先创建一个 CloudWatch 日志组,获取其 ARN,并为 Amazon ES 授予日志组写入权限,然后才能启用日志发布。Amazon CloudWatch Logs API Reference 介绍了相关操作:
-
CreateLogGroup
-
DescribeLogGroup
-
PutResourcePolicy
您可以使用 AWS SDKs访问这些操作。
AWS SDKs(除 Android 和 iOS SDKs 之外)支持 Amazon Elasticsearch Service 配置 API 参考 中定义的所有操作,包括 --log-publishing-options
和 CreateElasticsearchDomain
的 UpdateElasticsearchDomainConfig
选项。
如果您已启用慢速日志之一,请参阅为慢速日志设置 Elasticsearch 日志记录阈值。如果您仅启用了错误日志,您不需要执行任何其他配置步骤。
为慢速日志设置 Elasticsearch 日志记录阈值
默认情况下,Elasticsearch 禁用慢速日志。在启用到 的慢速日志发布CloudWatch 后,仍必须为每个 Elasticsearch 索引指定日志记录阈值。这些阈值精确定义应在哪个日志级别记录哪些内容。
您可以通过 Elasticsearch REST API 指定这些设置:
PUT
elasticsearch_domain_endpoint
/index
/_settings { "index.search.slowlog.threshold.query.warn": "5s", "index.search.slowlog.threshold.query.info": "2s" }
要测试慢速日志是否发布成功,请考虑从非常值开始验证日志是否出现在 CloudWatch 中,然后将阈值增大到更有用的级别。
如果日志没有显示,请检查以下内容:
-
CloudWatch 日志组是否存在? 检查 CloudWatch 控制台。
-
Amazon ES 是否有日志组写入权限? 检查 Amazon ES 控制台。
-
Amazon ES 域是否已配置为发布到该日志组? 检查 Amazon ES 控制台,使用 AWS CLI
describe-elasticsearch-domain-config
选项,或使用DescribeElasticsearchDomainConfig
之一调用 SDKs。 -
Elasticsearch 日志记录阈值是否足够低,让您的请求超过这些阈值? 要查看索引阈值,请使用以下命令:
GET
elasticsearch_domain_endpoint
/index
/_settings?pretty
如果要禁用索引的慢速日志,请将您更改的任何阈值恢复为其默认值 -1
。
使用 Amazon ES 控制台或 AWS CLI 禁用到 CloudWatch 的发布不 会阻止 Elasticsearch 生成日志;只会停止发布 这些日志。请务必检查索引设置,确定是否还需要这些慢速日志。
查看日志
在 CloudWatch 中查看应用程序和慢速日志,方法与查看任何其他 CloudWatch 日志一样。有关更多信息,请参阅 https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData 中的Amazon CloudWatch Logs User Guide查看日志数据。
下面是查看日志时的一些注意事项:
-
Amazon ES 仅将每一行中的前 255000 个字符发布到 CloudWatch。其余任何内容都将被截断。对于审核日志,它为每条消息 10000 个字符。
-
在 CloudWatch 中,日志流名称包含后缀
-index-slow-logs
、-search-slow-logs
、-es-application-logs
和-audit-logs
以帮助标识其内容。