Solr部署:审计日志

Solr部署:审计日志

Solr具有记录进入系统的所有HTTP请求审计跟踪的能力。
审计记录器是可插拔的,以适应任何可能的格式或日志目标。

审计跟踪(也称为审计日志)是与安全相关的按时间顺序记录、记录集合和/或记录的目标和来源,它们提供了影响特定操作、过程、事件或设备的活动序列的书面证据。

——维基百科

配置审计日志

审计日志在security.json中的auditlogging键下配置。

下面的示例使用插件默认值配置同步审计日志到Solr的默认日志文件。

1
2
3
4
5
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin"
}
}

默认情况下,任何审计日志插件将在后台异步记录以避免减慢请求速度。
要使审计日志同步发生,请添加值为falseasync参数。

使用异步日志时,您还可以选择配置队列大小、线程数量,以及队列满时是否阻塞或丢弃事件:

1
2
3
4
5
6
7
8
9
10
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"async": true,
"blockAsync" : false,
"numThreads" : 2,
"queueSize" : 4096,
"eventTypes": ["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]
}
}

审计日志参数

这些参数是:

class:
必需,默认:无

审计日志插件类名。
要么是solr.SolrLogAuditLoggingPluginsolr.MultiDestinationAuditLogger(在下面的《链接多个记录器》部分中描述)。

async:
可选,默认:true

定义事件是否异步记录。
这默认为true以避免减慢请求速度。
但是,如果您对系统的性能特征有信心并需要同步记录事件,您可以将其更改为false

blockAsync:
可选,默认:false

定义如果队列满时请求是否应被阻塞。
默认值false将丢弃未记录的事件。
仅在async=true时使用。

numThreads:
可选,默认:2

审计日志可用的线程数。
如果服务器可用的CPU核心数高于4,则默认值修改为CPU核心数 / 2
仅在async=true时使用。

queueSize:
可选,默认:4096

队列的大小。
仅在async=true时使用。

eventTypes:
可选,默认:["REJECTED", "ANONYMOUS_REJECTED", "UNAUTHORIZED", "COMPLETED", "ERROR"]

要记录的事件类型。
有关类型选项,请参见下面的《事件类型》部分。

muteRules:
可选,默认:无

定义何时不应记录事件(静音)的情况。
可能的规则可以排除来自某些用户、IP、路径或请求参数的请求。
有关静音规则选项,请参见下面的《静音某些事件》部分。

事件类型

可以使用eventTypes参数配置记录的事件类型。
默认情况下,只记录最终事件类型REJECTEDANONYMOUS_REJECTEDUNAUTHORIZEDCOMPLETEDERROR

这些是框架触发的事件类型:

事件类型 用法
AUTHENTICATED 用户成功认证
REJECTED 认证请求被拒绝
ANONYMOUS 请求以未知用户身份继续
ANONYMOUS_REJECTED 来自未知用户的请求被拒绝
AUTHORIZED 授权成功
UNAUTHORIZED 授权失败
COMPLETED 请求成功完成
ERROR 请求由于错误未执行

静音某些事件

配置参数muteRules允许您为某些事件静音日志。
您可以指定多个规则和将导致静音的规则组合。
您可以按请求类型、用户名、集合名、路径、请求参数或IP地址静音。

以下示例使用muteRules为三类请求静音审计日志:任何SEARCH请求、用户johndoe发出的任何请求,以及来自IP地址192.168.0.10的任何请求:

1
2
3
4
5
6
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"muteRules": [ "type:SEARCH", "user:johndoe", "ip:192.168.0.10" ]
}
}

静音规则也可以是列表,在这种情况下,列表中的所有项目都必须为真才能发生静音。
下面的配置有三个静音规则:

1
2
3
4
5
6
7
8
9
10
{
"auditlogging":{
"class": "solr.SolrLogAuditLoggerPlugin",
"muteRules": [
"ip:192.168.0.10", <1>
[ "path:/admin/collections", "param:action=LIST" ], <2>
[ "path:/admin/collections", "param:collection=test" ] <3>
]
}
}
  1. 这将静音来自客户端IP 192.168.0.10的所有事件。
  2. 此规则将静音带有action=LIST的集合API请求。
  3. 最后的规则将静音名为test的集合的集合API请求。

注意您如何可以混合单字符串规则与必须全部匹配的规则列表:

静音规则的选项是:

  • type:<request-type>:按名称的请求类型:ADMINSEARCHUPDATESTREAMINGUNKNOWN
  • collection:<collection-name>:按名称的集合。
  • user:<userid>:按用户ID的用户。
  • path:</path/to/handler>:相对于/solr的请求路径或对于搜索或更新请求相对于集合。
    路径是前缀匹配的,即/admin也将静音任何子路径。
  • ip:<ip-address>:IPv4地址。
  • param:<param>=<value>:请求参数。
    这很可能主要与path规则结合使用,如上面的示例所示。

链接多个记录器

使用MultiDestinationAuditLogger可以在链中配置多个审计记录器插件以记录到多个目标。

1
2
3
4
5
6
7
8
9
10
11
{
"auditlogging":{
"class" : "solr.MultiDestinationAuditLogger",
"plugins" : [
{ "class" : "solr.SolrLogAuditLoggerPlugin" },
{ "class" : "solr.MyOtherAuditPlugin",
"customParam" : "value"
}
]
}
}

注意记录到替代目标需要使用自定义审计日志插件定义。
有关基类的javadocs,请参见AuditLoggerPlugin

指标

审计日志插件记录关于日志请求计数和时间的指标,以及异步记录器的队列大小。
指标键都记录在SECURITY类别上,每个指标名称都以/auditlogging和记录器的类名(例如SolrLogAuditLoggerPlugin)的作用域为前缀。
各个指标是:

  • count:(计量器)记录写入的审计日志数量和速率。
  • errors:(计量器)记录错误数量和速率。
  • lost:(计量器)如果队列满且blockAsync=false,记录丢失事件的数量和速率。
  • requestTimes:(计时器)记录审计日志性能的延迟和百分位数。
  • totalTime:(计数器)记录日志记录花费的总时间。
  • queueCapacity:(计量)记录异步日志队列的最大大小。
  • queueSize:(计量)记录当前在队列中等待的事件数。
  • queuedTime:(计时器)记录事件在队列中等待的时间。
    将此与requestTimes指标相加将显示从事件到日志完成的总时间。
  • async:(计量)告知此记录器是否处于异步模式。

提示: 如果您遇到非常高的请求速率并有缓慢的审计记录器插件,您可能会看到queueSizequeuedTime指标增加,并可能开始丢弃事件(通过lost计数增加显示)。
在这种情况下,您可能希望增加numThreads设置。

© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero