如有疑问,请看视频:CAS单点登录(第7版)_在线视频教程-CSDN程序员研修院
1. 日志和审计
1.1. Logging
1.1.1. 概述
1.1.1.1. Logging
CAS 提供了一个日志记录工具,用于记录重要信息事件,如身份验证成功和失败;可以对其进行自定义以生成用于故障排除的其他信息。默认情况下,CAS 使用 Slf4jLogging 框架作为 Log4j 引擎的外观。
默认的 log4j 配置文件位于
cas-server-webapp-resources 源模块的
src/main/resources/log4j2.xml 中。在 cas.war 中,它位于
cas-server-webapp-resources*.jar 的根目录下。cas-overlay 在 etc/cas/config 中带有一个外部log42.xml,并设置了一个属性 logging.config=
file:/etc/cas/config/log4j2.xml 来引用它。默认情况下,对于与 org.apereo.cas 代码相关的所有功能,日志记录都设置为 INFO。出于调试和诊断目的,您可能希望将这些级别设置为 DEBUG 或 TRACE。
生产
您应该始终在WARN 下运行所有内容。在生产环境中,警告和错误是您关心的事情。其他一切都只是诊断。仅在您需要研究特定问题时才打开 DEBUG 或 INFO。
1.1.1.2. 执行器端点
提供了以下终端节点:
GET | /cas/actuator/loggingConfig/stream |
从所有配置为捕获日志的 CAS appender 中获取最后 X 个日志条目。
GET | /cas/actuator/loggingConfig |
GET | /cas/actuator/loggers/{name} |
GET | /cas/actuator/loggers |
POST | /cas/actuator/loggers/{name} |
GET | /cas/actuator/logfile |
CAS 插件
CAS 使用的 log4j2.xml 文件包括自定义 Log4j2 插件:
CasAppender:CasAppender 包装另一个常规 appender 并从日志条目中删除敏感值,例如 Ticket Granting Tickets 或 Proxy Granting Tickets。它可以通过以下 Log4j2 配置模板使用:
1 2 3 4 5 6 7 |
maxEntries 属性指示要保留在内存缓存中的最新日志条目的最大数量。当高速缓存已满时,将删除最早的条目。默认情况下,缓存中不保留任何内容。当您想通过 actuator endpoints 等流式传输最新的日志条目时,此功能非常有用。
ExceptionOnlyFilter:为了允许 CAS 在 WARN 和 ERROR 处自由记录意外错误,而不会用堆栈跟踪掩盖所有内容,默认情况下,日志中的异常处于禁用状态,但有log4j2.xml属性可以重新打开它们。默认情况下,所有异常都写入专用的堆栈跟踪滚动日志文件,这是使用嵌套在 CasAppender 中的自定义ExceptionOnlyFilter完成的。
1.1.1.3. Log4j2 属性
log4j2.xml 文件包含各种设置的属性,这些设置可以在 log4j2.xml 文件的 properties 部分中设置,在 Classpath 上名为
log4j2.component.properties 的属性文件中设置,或者作为系统属性进行设置。如果在
log4j2.component.properties 中设置属性,请务必包含:
1 | log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector |
以便继续使用 CAS 默认设置的异步日志记录。要关闭异步日志记录,请在
log4j2.component.properites 中包含以下内容或作为系统属性:
1 | log4j2.contextSelector=org.apache.logging.log4j.core.selector.BasicContextSelector |
1.1.1.4. 配置
将 log4j2.xml 文件外部化到系统路径以在升级之间保留设置通常很有帮助。默认情况下log4j2.xml文件的位置位于运行时 Classpath 上,并且可以通过 CAS 属性进行控制。
CAS 配置目录中提供了以下设置和属性:
必填
自选
第三方
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.logging.cloudwatch.credential-access-key= 使用 AWS 提供的访问密钥进行身份验证。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.credential-secret-key= 使用 AWS 提供的密钥进行身份验证。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.endpoint= AWS 自定义终端节点。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.log-group-name= 日志组是一个容器,用于组织和存储共享相同保留、监控和访问控制设置的日志流。每个日志组都可以有一个唯一的名称,您可以将其视为与特定应用程序、服务或环境相关的日志的逻辑分组。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.log-stream-name= 日志流是共享同一源的一系列日志事件。每个日志流都属于一个日志组,您可以在一个日志组中拥有多个日志流。日志流通常用于分隔来自同一应用程序或服务中不同来源的日志数据。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
显示 1 到 5 的 8 个条目
上一页12下一页
要禁用日志清理,请使用 system 属性
CAS_TICKET_ID_SANITIZE_SKIP=true 启动容器。
1.1.1.4.1. 日志级别
虽然可以通过本机 log4j2.xml 语法直接处理对数级别,但也可以使用通常的 CAS 属性对其进行修改。
CAS 配置目录中提供了以下设置和属性:
第三方
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Third Party(第三方)。此标志表示配置设置不受 CAS 生态系统的控制、拥有或管理,并且会影响第三方库(如 Spring Boot 或 Spring Cloud to CAS)提供的功能。有关更多信息,您可能必须访问第三方来源以查找更多详细信息。
Show entries
搜索:
· logging.level= 日志级别严重性映射。例如,' org.springframework.boot.context.logging.LoggingApplicationListener. 如何配置此属性? |
显示 1 到 1 的 1 个条目
上一页1下一页
1.1.1.4.2. 刷新间隔
log4j2.xml 本身控制日志记录配置的刷新间隔。Log4j 能够自动检测配置文件的更改并重新配置自身。如果在配置元素上指定了 monitorInterval属性并将其设置为非零值,则将在下次评估和/或记录日志事件时检查该文件,并且 monitorInterval 自上次检查以来已过去。这将允许您在不重新启动服务器环境的情况下调整日志级别和配置。
1 2 3 4 | ... |
1.1.1.4.3. 附加程序
Appender 负责将日志事件传送到其目标。Appenders 通常只负责将事件数据写入目标目标。在大多数情况下,他们将设置事件格式的责任委托给布局。一些 appender 包装其他 appender,以便它们可以修改日志事件、处理 Appender 中的故障、根据高级过滤条件将事件路由到从属 Appender 或提供不直接格式化事件以供查看的类似功能。Appender始终具有名称,以便可以从 Logger中引用它们。
以下 Appender 元素只是可用选项的部分集合。
布局 | 描述 |
AsyncAppender | 接受对其他 Appender 的引用,并导致在单独的 Thread 上将 LogEvents 写入它们。 |
CassandraAppender | 将其输出写入 Apache Cassandra 数据库。必须提前配置键空间和表,并且列应在配置文件中映射。 |
ConsoleAppender | 将其输出写入 System.out 或 System.err,并将 System.out 作为默认目标。 |
FailoverAppender | 包装一组 appender。如果主 Appender 失败,则将按顺序尝试辅助 Appender,直到一个成功或没有更多辅助 Appender 可以尝试。 |
FileAppender | 写入 fileName 参数中命名的 File。 |
CsvParameterLayout | 将事件的参数转换为 CSV 记录,忽略该消息。 |
JDBCAppender | 使用标准 JDBC 将日志事件写入关系数据库表。 |
JPAAppender | 使用 Java Persistence API 2.1 将日志事件写入关系数据库表。 |
HttpAppender | 通过 HTTP 发送日志事件。必须提供 Layout 才能设置日志事件的格式。 |
KafkaAppender | 将事件记录到 Apache Kafka 主题。每个日志事件都作为 Kafka 记录发送。 |
NoSQLAppender | 将日志事件写入 NoSQL 数据库;MongoDB 和 Apache CouchDB 存在提供程序实现。 |
RoutingAppender | 评估日志事件,然后将它们路由到从属 Appender。 |
SMTPAppender | 在发生特定日志记录事件时发送电子邮件,通常是在错误或致命错误上。 |
JeroMQ | ZeroMQ appender 使用 JeroMQ 库将日志事件发送到一个或多个 ZeroMQ 终端节点。 |
RollingFileAppender | 写入 fileName 参数中命名的 File,并根据 TriggeringPolicy 和 RolloverPolicy 滚动文件。 |
RewriteAppender | 允许在另一个 Appender 处理日志事件之前对其进行操作。这可用于掩盖敏感信息(如密码)或将信息注入每个事件。 |
有关完整详细信息,请查看官方 Log4j 文档
1.1.1.4.4. 日志模式
默认情况下,通过 log4j2.xml 文件提供的大多数 appender 都使用基于模式的布局来格式化日志消息。也可以使用以下替代布局:
布局 | 描述 |
CsvParameterLayout | 将事件的参数转换为 CSV 记录,忽略该消息。 |
GelfLayout | 以 Graylog 扩展日志格式 (GELF 对事件进行布局。 |
HTMLLayout | 生成 HTML 页面并将每个 LogEvent 添加到表中的一行 |
JSONLayout | 以格式正确或碎片化的 JSON 创建日志事件。 |
PatternLayout | 甚至根据转换模式设置日志格式。 |
RFC5424Layout | 根据增强的 Syslog 规范 RFC 5424 设置日志事件的格式。 |
SerializedLayout | 日志事件被转换为在 JMS 或套接字连接中有用的字节数组。 |
SyslogLayout | 将日志事件格式化为 BSD Syslog 记录。 |
XMLLayout | 以格式正确或碎片化的 XML 创建日志事件。 |
YamlLayout | 在 YAML 中创建日志事件。 |
要了解有关每个选项的细微差别和配置设置的更多信息,请参阅官方 Log4J 指南。
1.1.1.5. 日志文件轮换
默认配置指定在启动时、大小或特定时间滚动更新日志的触发策略。这些策略适用于 RollingFile appender。
例如,以下 XML 片段定义了在 JVM 启动时、日志大小达到 10 MB 以及当前日期不再与日志的开始日期匹配时滚动更新日志的策略。
1 2 3 4 5 6 7 8 9 10 | <RollingFile name="file" fileName="${baseDir}/cas.log" append="true" filePattern="${baseDir}/cas-%d{yyyy-MM-dd-HH}-%i.log.gz"> ... ... |
触发策略确定是否应执行展期更新,并且还可以设计展期策略以指示应如何执行展期更新。如果未配置策略,则将使用默认策略。
要查找更多全面的文档,请在此处查看指南。
1.1.1.5.1. 展期策略
自定义滚动更新策略提供了一个删除操作,与使用 DefaultRolloverStrategy max 属性相比,它使用户能够更好地控制在滚动更新时删除的文件。delete 操作允许用户配置一个或多个条件,以选择要相对于基目录删除的文件。
例如,以下 appender 在滚动更新时删除基目录下与 */*.log glob 匹配且存在时间不超过 7 天的所有文件。
1 2 3 4 5 6 7 8 9 10 11 | <RollingFile name="file" fileName="${baseDir}/cas.log" append="true" filePattern="${baseDir}/cas-%d{yyyy-MM-dd-HH}-%i.log.gz"> ... ... |
要查找更多全面的文档,请在此处查看指南。
1.1.1.6. 日志数据清理
出于安全考虑,默认情况下,CAS 将尝试从所有日志数据中删除票证授予票证和代理授予票证 ID。这当然包括由日志记录框架路由到日志目标的消息以及所有审计消息。
示例如下:
1 2 3 4 5 6 7 | WHO: audit:unknown WHAT: TGT-******************123456-cas01.example.org ACTION: TICKET_GRANTING_TICKET_DESTROYED APPLICATION: CAS WHEN: Sat Jul 12 04:10:35 PDT 2014 CLIENT IP ADDRESS: ... SERVER IP ADDRESS: ... |
票证 ID 的尾端会保留一定数量的字符,以帮助进行故障排除和诊断。
1.1.1.7. 日志消息摘要
默认情况下,会汇总记录的堆栈跟踪,并且输出中仅显示堆栈跟踪的前几行以减少干扰。如果您希望查看完整的堆栈跟踪并禁用摘要模式,您可以考虑将相应包的日志级别更改为 DEBUG可以通过你的LogMessageSummarizer实现来替换和自定义此行为,该实现应使用 Java ServiceLoader API 向 CAS 注册。为此,您至少需要创建一个
src/main/resources/META-INF/services/org.apereo.cas.util.LogMessageSummarizer 文件,其中包含以下内容:
1 | org.sso.example.MyLogMessageSummarizer |
如果需要完全禁用摘要模式,则应在上述文件中改用以下内容:
1 | org.apereo.cas.util.logging.DisabledLogMessageSummarizer |
1.1.2. Fluentd
1.1.2.1. Fluentd 日志记录
Fluentd 是用于统一日志记录层的开源数据收集器。Fluentd 允许您统一数据收集和使用,以便更好地使用和理解数据。
CAS 日志数据可以自动路由到 Fluentd。通过在覆盖中包含以下模块来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-logging-config-fluentd"} |
使用上面的模块,您可以声明一个特定的 appender 来与 AWS CloudWatch 通信:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <FluentdConfig maxBufferSize="536870912" bufferChunkInitialSize="1048576" bufferChunkRetentionSize="4194304" bufferChunkRetentionTimeMillis="1000" flushAttemptIntervalMillis="600" waitUntilBufferFlushed="10" waitUntilFlusherTerminated="10" senderMaxRetryCount="8" senderBaseRetryIntervalMillis="400" senderMaxRetryIntervalMillis="30000" connectionTimeoutMillis="5000" readTimeoutMillis="5000" ackResponseMode="true" sslEnabled="false" jvmHeapBufferMode="true" fileBackupDir="true"> |
1.1.3. CloudWatch
1.1.3.1. CloudWatch 日志记录
日志数据可以自动路由到 AWS CloudWatch。通过在覆盖中包含以下模块来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-aws-cloudwatch"} |
使用上面的模块,您可以声明一个特定的 appender 来与 AWS CloudWatch 通信:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <CloudWatchAppender name="cloudWatch" awsLogGroupName="LogGroupName" awsLogStreamName="LogStreamName" awsLogRegionName="us-west-1" credentialAccessKey="..." credentialSecretKey="..." awsLogStreamFlushPeriodInSeconds="5" createIfNeeded="true" createLogGroupIfNeeded="false" createLogStreamIfNeeded="false"> ... |
AWS 凭证会自动从以下来源获取,如果相关,并且可以通过 CAS 配置实现:
链接到 IAM 角色的 EC2 实例元数据。
包含 accessKey 和 secretKey 作为属性键的外部属性文件。
AWS 配置文件路径和配置文件名称。
包括 aws.accessKeyId、aws.secretKey 和 aws.sessionToken 的系统属性
环境变量,包括 AWS_ACCESS_KEY_ID、AWS_SECRET_KEY 和 AWS_SESSION_TOKEN。
Properties 文件指定为 awscredentials.properties,其中包含 accessKey 和 secretKey 作为属性键。
访问密钥和密钥的静态凭证由手头的配置(日志记录等)直接提供。
createIfNeeded、createLogGroupIfNeeded 和 createLogStreamIfNeeded 是可选的;createIfNeeded 将默认为true,而 createLogGroupIfNeeded 和 createLogStreamIfNeeded 默认为 false。任何 true 值都将优先(即,将 all 设置为 false 以不创建任何内容)。
1.1.3.2. 执行器端点
CAS 提供以下端点:
GET | /cas/actuator/cloudWatchLogs/stream |
从 AWS Cloud Watch 获取最后 X 个日志条目。
CAS 配置目录中提供了以下设置和属性:
笔记
配置元数据
本节中列出的配置属性集合是从包含实际字段定义、类型、描述、模块等的 CAS 源和组件自动生成的。这些元数据可能并不总是 100% 准确,或者可能缺乏细节和足够的解释。
有选择性
本部分仅供参考。请勿将整个设置集合复制/粘贴到 CAS 配置中;而是只选择您需要的属性。除非您确定设置的用途,否则不要启用设置,并且不要将设置复制到您的配置中以保留它们作为参考。所有这些想法都会导致升级头痛、维护噩梦和过早衰老。
YAGNI
请注意,对于几乎所有用例,声明和配置此处列出的属性就足够了。您不必显式修改 CAS XML/Java/etc配置文件来设计身份验证处理程序、创建属性发布策略等。CAS 在运行时将自动为您配置所有必需的更改。如果您不确定给定 CAS 设置的含义,请不要犹豫不决地打开它。查看代码库,或者更好的是,提出问题以阐明预期行为。
命名约定
属性名称可以用非常宽松的术语来指定。例如 cas.someProperty、cas.some-property cas.some_property 都是有效名称。虽然 CAS 接受 allforms,但某些组件(在 CAS 和其他使用的框架中)在运行时的激活以属性值为条件,其中需要使用 kebab 大小写在 CAS 配置中指定此属性。这既适用于 CAS 拥有的属性,也适用于可能通过外部库或框架(如 Spring Boot 等)呈现给系统的属性。
注意
如果可能,属性应以小写 kebab 格式存储,例如 cas.property-name=value。此规则唯一可能的例外是在命名 actuator endpoints 时;执行器端点的名称(即 ssoSessions)必须保持驼峰式命名法模式。
由 CAS 平台直接控制的设置和属性始终以前缀 cas.所有其他设置都通过其他底层框架进行控制并提供给 CAS,并且可能具有自己的架构和语法。请小心区分。无法识别的属性将被 CAS 和/或 CAS 所依赖的框架拒绝。这意味着,如果您以某种方式拼错了属性定义或未能遵守点表示法语法等,则 CAS 将完全拒绝您的设置,并且它可能控制的功能永远不会以您想要的方式激活。
验证
在 CAS 启动时自动验证配置属性,以报告配置绑定问题,尤其是在配置架构无法识别或验证定义的 CAS 设置时。其他验证过程也通过 Spring Boot 和系列在启动时自动应用的配置元数据和属性迁移来处理。
索引设置
能够接受多个值的 CAS 设置通常使用索引进行记录,例如 cas.some.setting[0]=value。索引 [0] 旨在由采用者递增,以允许不同的多个配置块。
1.1.4. SQS
1.1.4.1. AWS SQS 日志记录
日志数据可以自动路由到 AWS SQS。通过在覆盖中包含以下模块来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-logging-config-sqs"} |
使用上述模块,您可以声明一个特定的 appender 来与 AWS SQS 通信:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <SQSAppender name="SQSAppender" region="us-west-1" credentialAccessKey="..." credentialSecretKey="..." queueName="CAS" endpoint="..." queueTags="tag1->value1,tag2->value2"> ... |
endpoint设置是可选的。如果 queueName 指示的 SQS 队列不存在,则在初始化和启动 appender 时,CAS 将自动创建该队列。
AWS 凭证会自动从以下来源获取,如果相关,并且可以通过 CAS 配置实现:
链接到 IAM 角色的 EC2 实例元数据。
包含 accessKey 和 secretKey 作为属性键的外部属性文件。
AWS 配置文件路径和配置文件名称。
包括 aws.accessKeyId、aws.secretKey 和 aws.sessionToken 的系统属性
环境变量,包括 AWS_ACCESS_KEY_ID、AWS_SECRET_KEY 和 AWS_SESSION_TOKEN。
Properties 文件指定为 awscredentials.properties,其中包含 accessKey 和 secretKey 作为属性键。
访问密钥和密钥的静态凭证由手头的配置(日志记录等)直接提供。
1.1.5. Loggly
1.1.5.1. Loggly 配置
Loggly 是一种基于云的日志管理服务,可让您轻松访问和分析日志中的关键任务信息。日志数据可以通过 Rsyslog 自动路由到 Loggly。使用 Rsyslog 的优势在于,它可以在不阻止应用程序的情况下发送 TCP 事件,可以选择加密数据,甚至可以将数据排队以增加网络故障的稳健性。
有关更多信息,请参阅本指南。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ... %c %M - %m%n ... |
1.1.6. Google Cloud
1.1.6.1. Google Cloud 日志
Cloud Logging 是 Google Cloud 提供的托管式日志记录服务。
此处的集成还提供了对将 Web 请求跟踪 ID 与相应日志条目关联的自动支持,方法是从 MDC 检索 X-B3-TraceId 或 X-Cloud-Trace-Context 标头值。
1.1.6.2. JSON 布局模板
JsonTemplateLayout 是一种可自定义、高效且无垃圾的 JSON 生成布局。它根据提供的 JSON 模板描述的结构对 LogEvents 进行编码。
1 |
箱
另一种选择是使用 CAS 提供的专用记录器。通过在 WAR 覆盖中包含以下依赖项来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-gcp-logging"} |
用法
由于日志记录的设置方式,将忽略 CAS 属性中定义的 Google Cloud 项目 ID 和凭据。相反,您应该在必要时将 GOOGLE_CLOUD_PROJECT 和
GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为项目 ID 和 credentials 私钥位置。或者,也可以直接在日志记录配置中设置 Google Cloud 项目 ID。
以下是日志记录配置的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <JsonLayout locationInfo="false" includeStacktrace="true" objectMessageAsJsonObject="true" compact="true" properties="false" eventEol="true" includeTimeMillis="false"> <GoogleCloudAppender name="GoogleCloudAppender" flattenMessage="true" projectId="..."> <Logger name="org.apereo.cas" includeLocation="true" level="INFO" additivity="false"> |
1.1.6.3. 执行器端点
CAS 提供以下端点:
GET | /cas/actuator/gcpLogs/stream |
从 GCP 获取最后 X 个日志条目。
CAS 配置目录中提供了以下设置和属性:
必填
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.logging.gcp.log-name= 它通常具有以下语法:projects/[PROJECT_ID]/logs/[LOG_ID] org.apereo.cas.configuration.model.support.aws.GoogleCloudLogsProperties. 如何配置此属性? |
· cas.logging.gcp.project-id= 项目 ID 是分配给 GCP 环境中特定项目的唯一标识符。项目 ID 在所有 GCP 项目中都是全局唯一的,这意味着任何两个项目都不能具有相同的项目 ID。项目 ID 用于各种 API 调用、配置和 URL,以唯一标识您的 CAS 项目。 org.apereo.cas.configuration.model.support.aws.GoogleCloudLogsProperties. 如何配置此属性? |
显示 1 到 2 的 2 个条目
上一页1下一页
1.1.7. 弹性搜索
1.1.7.1. 弹性搜索
JsonTemplateLayout 是一种可自定义、高效且无垃圾的 JSON 生成布局。它根据提供的 JSON 模板描述的结构对 LogEvent进行编码。
要根据 Elastic Common Schema (ECS) 规范格式化日志,可以使用以下配置:
1 2 3 4 5 6 7 8 | ... ... |
生成的 JSON 应与以下内容匹配:
1 2 3 4 5 6 7 8 9 10 11 | { "@timestamp": "2017-05-25T19:56:23.370Z", "ecs.version": "1.2.0", "log.level": "ERROR", "message": "Hello, error!", "process.thread.name": "main", "log.logger": "org.apache.logging.log4j.JsonTemplateLayoutDemo", "error.type": "java.lang.RuntimeException", "error.message": "test", "error.stack_trace": "java.lang.RuntimeException: ...\n"} |
1.1.8. Logstash
1.1.8.1. Logstash 日志记录
CAS 日志记录框架能够将日志消息路由到 TCP/UDP 端点。此配置假定 Logstash 服务器已在端口 9500 上启用其 TCP 输入:
1 2 3 4 5 6 7 8 9 10 11 12 13 | ... <Socket name="socket" host="localhost" connectTimeoutMillis="3000" port="9500" protocol="TCP" ignoreExceptions="false"> ... ... |
1.1.9. MDC
1.1.9.1. 映射的诊断上下文
为了对每个请求进行唯一标记,CAS 将 contextualinformation 放入 MDC(Mapped Diagnostic Context 的缩写)中。这有效地转换为许多可用于日志记录上下文的特殊变量,这些变量可能会传达有关请求或身份验证事件性质的其他信息。
变量 | 描述 |
remoteAddress | HTTP 请求的远程地址。 |
remoteUser | HTTP 请求的远程用户。 |
serverName | HTTP 请求的服务器名称。 |
serverPort | HTTP 请求的服务器端口。 |
locale | HTTP 请求的区域设置。 |
contentType | HTTP 请求的内容类型。 |
contextPath | HTTP 请求的上下文路径。 |
localAddress | HTTP 请求的本地地址。 |
localPort | HTTP 请求的本地端口。 |
remotePort | HTTP 请求的远程端口。 |
pathInfo | HTTP 请求的路径信息。 |
protocol | HTTP 请求的协议。 |
authType | HTTP 请求的身份验证类型。 |
method | Method 的请求。 |
queryString | HTTP 请求的查询字符串。 |
requestUri | HTTP 请求的请求 URI。 |
scheme | HTTP 请求的方案。 |
timezone | HTTP 请求的时区。 |
principal | CAS 身份验证的主体 ID。 |
requestId | 为此请求生成的标识符。 |
此外,所有可用的请求属性、标头和参数都作为变量公开。
这些变量可能包括密码。如果您在 SysLog Appender 中设置includeMDC=true,这些详细信息(包括清除密码)将被发送到日志服务器。
上述变量可用于日志记录模式:
单独使用 %X 可包含所有变量。
使用 %X{key} 包含指定的变量。
1 2 3 |
1.1.10. Papertrail
1.1.10.1. Papertrail 日志记录
Papertrail 是一种基于云的日志管理服务,提供聚合日志记录工具、灵活的系统组、团队范围的访问、长期存档、图表和分析导出、监控 webhook 等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ... <Syslog name="Papertrail" host=" port="XXXXX" protocol="TCP" appName="MyApp" mdcId="mdc" facility="LOCAL0" enterpriseNumber="18060" newLine="true" format="RFC5424" ignoreExceptions="false" exceptionPattern="%throwable{full}"> ... |
1.1.11. Sentry
1.1.11.1. 概述
Sentry 允许您实时跟踪日志和错误。它提供对生产部署的见解以及用于重现和修复崩溃的信息。
此处的集成支持错误处理和向 Sentry 报告、通过 span 和事务进行性能监控以及 Sentry 日志记录支持。
1.1.11.2. 配置
通过在 WAR 覆盖中包含以下依赖项来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-sentry"} |
必须调整 Logging 配置文件以匹配以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <Sentry name="Sentry" minimumBreadcrumbLevel="DEBUG" minimumEventLevel="WARN" dsn="..." /> |
CAS 配置目录中提供了以下设置和属性:
第三方
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Third Party(第三方)。此标志表示配置设置不受 CAS 生态系统的控制、拥有或管理,并且会影响第三方库(如 Spring Boot 或 Spring Cloud to CAS)提供的功能。有关更多信息,您可能必须访问第三方来源以查找更多详细信息。
Show entries
搜索:
· sentry.attach-server-name= io.sentry.spring.boot.jakarta.SentryProperties. 如何配置此属性? |
· sentry.attach-stacktrace= io.sentry.spring.boot.jakarta.SentryProperties. 如何配置此属性? |
· sentry.attach-threads= io.sentry.spring.boot.jakarta.SentryProperties. 如何配置此属性? |
· sentry.backpressure-monitor= io.sentry.spring.boot.jakarta.SentryProperties. 如何配置此属性? |
· sentry.bundle-ids= io.sentry.spring.boot.jakarta.SentryProperties. 如何配置此属性? |
显示 1 到 5 的 118 个条目
上一页12345...24下一页
痕迹导航保存在内存中(默认情况下为最后 100 条记录),并与事件一起发送。例如,默认情况下,如果使用 logger.info 或 logger.warn 记录 100 个条目,则不会向 Sentry 发送任何事件。如果随后使用 logger.error 进行记录,则会向 Sentry 发送一个事件,其中包含这 100 条信息或警告消息。为此,SentryAppender 需要接收所有日志条目,以决定将哪些内容保留为痕迹导航或作为事件发送。将 SentryAppender 日志级别配置设置为低于为 minimumBreadcrumbLevel 和 minimumEventLevel 设置的值,以便接收这些日志消息。
最后,您需要配置 DSN(客户端密钥)和可选的其他值,例如 environment 和 release。
您可以在
src/main/resources/sentry.properties 文件中执行此操作:
1 | dsn=https://12345@12345.ingest.sentry.io/12345 |
或者在启动 CAS 时通过系统属性:
1 | java -Dsentry.dsn=https://12345@12345.ingest.sentry.io/12345 ... |
或者在启动 CAS 之前通过环境变量:
1 | export SENTRY_DSN=https://12345@12345.ingest.sentry.io/12345 |
1.1.12. SysLog
1.1.12.1. SysLog 日志记录
CAS 日志记录框架确实能够将消息路由到 externalsyslog 实例。要配置它,你首先要配置SysLogAppender,然后指定哪些消息需要路由到这个实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | ... <Syslog name="SYSLOG" format="RFC5424" host="localhost" port="8514" protocol="TCP" appName="MyApp" includeMDC="true" mdcId="mdc" facility="LOCAL0" enterpriseNumber="18060" newLine="true" messageId="Audit" id="App"/> ... |
映射诊断上下文 (MDC) 可能包含密码。设置 includeMDC=true 会将明文密码作为变量发送到 SysLog。
您还可以通过 SSL 配置远程目标输出并指定相关的密钥库配置:
1 2 3 4 5 6 7 8 9 10 11 12 | ... ... |
1.1.13. Splunk
1.1.13.1. Splunk 日志记录
日志数据可以自动路由到 Splunk。通过在覆盖中包含以下模块来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-logging-config-splunk"} |
您可能还需要在 CAS 覆盖中声明以下存储库,以便能够解析依赖项:
1 2 3 4 5 6 | repositories { maven { mavenContent { releasesOnly() } url "https://splunk.jfrog.io/splunk/ext-releases-local" }} |
使用上面的模块,您可以声明一个特定的 appender 来与 Splunk 通信。以下示例假设您在本地运行 Splunk Enterprise(IP 地址为 127.0.0.1),并在端口 15000 上配置了 TCP 输入。TCP 输入的端口号与 Splunk Enterprise 管理端口不同。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ... ... |
当然,您需要在 Splunk Enterprise 中创建一个 TCP 输入,CAS 会将日志写入该输入。
1.1.14. Logback
1.1.14.1. Logback 日志记录
CAS 还支持 Logback 作为替代日志记录引擎。在高层次上,Logback 架构类似于 Log4j 的架构,其中通常在 logback.xml 文件中定义 Logger、Appender 和 Layout 组件。
请参阅 Logback 文档以了解更多信息。
1.1.14.2. 配置
通过在 WAR 覆盖中包含以下依赖项来启用支持:
Apache Maven
Gradle
BOM - Spring
BOM - Gradle
资源
1 2 3 4 5 6 7 8 9 10 | dependencies { /* The following platform references should be included automatically and are listed here for reference only. implementation enforcedPlatform("org.apereo.cas:cas-server-support-bom:${project.'cas.version'}") implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) */ implementation "org.apereo.cas:cas-server-support-logback"} |
您还必须确保从 WAR 覆盖中排除以下模块和依赖项:
1 2 3 4 5 6 7 8 9 10 | configurations.all { exclude(group: "org.apache.logging.log4j", module: "log4j-api") exclude(group: "org.apache.logging.log4j", module: "log4j-jakarta-web") exclude(group: "org.apache.logging.log4j", module: "log4j-web") exclude(group: "org.apache.logging.log4j", module: "log4j-jcl") exclude(group: "org.apache.logging.log4j", module: "log4j-slf4j-impl") exclude(group: "org.apache.logging.log4j", module: "log4j-slf4j2-impl") exclude(group: "org.apereo.cas", module: "cas-server-core-logging")} |
示例logback.xml文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
小心
使用 Logback 时,CAS 不会处理清理日志数据以删除敏感的票证 ID,例如票证授予票证或代理授予票证。虽然这可能会在未来版本中解决,但在与外部系统(如 Splunk 或 Syslog 等)共享日志数据之前,您应该格外小心地清理日志数据。
CAS 配置目录中提供了以下设置和属性:
必填
自选
第三方
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Required。此标志表示可能需要该设置的存在才能激活或影响 CAS 功能的行为,并且通常应进行审查、可能拥有和调整。如果为该设置分配了默认值,则无需严格将该设置放在配置副本中,但仍应对其进行检查以确保它符合您的部署预期。
Show entries
搜索:
· cas.logging.cloudwatch.credential-access-key= 使用 AWS 提供的访问密钥进行身份验证。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.credential-secret-key= 使用 AWS 提供的密钥进行身份验证。 此设置支持 Spring 表达式语言。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.endpoint= AWS 自定义终端节点。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.log-group-name= 日志组是一个容器,用于组织和存储共享相同保留、监控和访问控制设置的日志流。每个日志组都可以有一个唯一的名称,您可以将其视为与特定应用程序、服务或环境相关的日志的逻辑分组。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
· cas.logging.cloudwatch.log-stream-name= 日志流是共享同一源的一系列日志事件。每个日志流都属于一个日志组,您可以在一个日志组中拥有多个日志流。日志流通常用于分隔来自同一应用程序或服务中不同来源的日志数据。 org.apereo.cas.configuration.model.support.aws.AmazonCloudWatchLogsProperties. 如何配置此属性? |
显示 1 到 5 的 8 个条目
上一页12下一页
1.2. 审计
1.2.1. 概述
1.2.1.1. 审计
CAS 使用自己的 Inspektr 框架进行审计和统计。这个框架曾经是一个单独的项目,以前位于代码库之外,后来完全合并到 CAS 代码库中。Inspektr 组件允许对粗粒度的执行路径进行非侵入性审计和日志记录,例如,通过使用注释和 Spring 管理的 @Aspect 样式方面执行 Spring 管理的 bean 方法。
CAS 服务器自动配置所有相关的 Inspektr 组件。注入到 Inspektr 类的所有可用配置选项都可以通过相关的 CAS 属性提供给部署人员。请注意,CAS 的审计记录管理功能支持同时处理多个审计记录目标。换句话说,您可以选择同时将审计记录路由到数据库和 REST 终端节点以及任意数量的基于 Logger 的目标。
CAS 配置目录中提供了以下设置和属性:
自选
笔记
下面列出的配置设置在 CAS 配置元数据中标记为 Optional(可选)。This标志表示在最终用户 CAS 配置中不需要立即存在该设置,因为分配了默认值,或者该功能的激活不受设置值有条件地控制。换句话说,仅当需要修改默认值或需要打开由设置控制的功能时,才应在配置中包含此字段。
Show entries
搜索:
· cas.audit.engine.abbreviation-length=100 尽可能按给定长度缩写审核日志中的字段和条目。这通常适用于在审核日志中捕获的长服务 URL。负值/零值将完全禁用缩写。 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties. 如何配置此属性? |
· cas.audit.engine.alternate-client-addr-header-name=X-Forwarded-For 如果应用程序位于负载均衡器后面,则客户端地址通常最终是负载均衡器地址本身。此处标头的一个常见示例是 X-Forwarded-For,用于从请求中收集客户端地址,前提是负载均衡器已正确配置为传递该标头。 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties. 如何配置此属性? |
· cas.audit.engine.alternate-server-addr-header-name= 要使用的请求标头标识服务器地址。 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties. 如何配置此属性? |
· cas.audit.engine.audit-format=DEFAULT 要在日志中使用的审计格式。可用值如下: DEFAULT:默认审计格式。 JSON在必要/可能的情况下,将审核日志输出为 JSON 字符串。 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties. 如何配置此属性? |
· cas.audit.engine.enabled=true 是否应启用审核功能。 org.apereo.cas.configuration.model.core.audit.AuditEngineProperties. 如何配置此属性? |
显示 1 到 5 的 12 个条目
上一页123下一页
1.2.1.2. 执行器端点
CAS 提供以下端点:
GET | /cas/actuator/auditLog |
提供审核日志的报告。除 'interval' 之外,每个过滤器都可以接受要匹配的正则表达式。