Logging Configurations
To troubleshoot any operational issues efficiently, it is crucial to manage the log files. It enables you to track and analyze the activity, usage, problems, and security like, user access and critical configuration changes. It helps you to identify unexpected anomalies in logs. Additionally, it is also important to add the configurations related to log rotation and retention settings.
This section provides recommendations on configuring the log levels of every component of API Gateway to enable automatic log rotation. By default, the log files are stored in the following locations:
- SAG_Install_Directory\IntegrationServer\instances\instance_name\logs.
- SAG_Install_Directory\profiles\IS_instance_name\logs.
- SAG_Install_Directory\InternalDataStore\logs.
- Client log: SAG_Install_Directory\IntegrationServer\instances\instance_name\logs.
- Server log: SAG_Install_Directory\tsa.
- SAG_Install_Directory\profiles\IS_instance_name\apigateway\dashboard\config or Kibana_Install_Directory\config.
Log File Rotation Settings
API Gateway
Software AG recommends the following logging guidelines for API Gateway server to enable automatic log rotation. You must have the API Gateway's manage user administration functional privilege assigned to configure the watt parameters in API Gateway UI for server log and audit log. You can configure the watt parameters in the Watt keys section under API Gateway UI -> Administration -> General -> Extended settings -> Show and hide keys by providing the recommended values.
- Server.log
- Log level of the
API Gateway
server.
Server log file server.cnf is located at SAGInstallDirectory\IntegrationServer\instances\instance_name\config.
To configure the total size of the logs as 1 GB, set the following values to the corresponding properties in the Watt keys section under API Gateway UI -> Administration -> General -> Extended settings -> Show and hide keys.watt.server.serverlogFilesToKeep=100 watt.server.serverlogRotateSize=10MB
- Audit.log
- Software AG
logs the audit information for different categories of system transactions and
events.
Audit log file server.cnf is located at SAGInstallDirectory\IntegrationServer\instances\instance_name\config.
To configure the total size of the logs as 1 GB, set the following values to the corresponding properties in the Watt keys section under API Gateway UI -> Administration -> General -> Extended settings -> Show and hide keys.watt.server.audit.logFilesToKeep=100 watt.server.audit.logRotateSize=10MB
- Osgi.log
- Log level of the Osgi file type.
Osgi log file log4j2.properties is located at SAGInstallDirectory\profiles\IS_instance_name\configuration\logging.
To configure the total size of the logs as 300 MB, set the following values in log4j2.properties log file and save the file.appender.rolling.policies.size=10MB appender.rolling.strategy.max=30
- Wrapper.log
- Log level of the Wrapper file type.
Wrapper log file custom_wrapper.conf is located at SAGInstallDirectory\profiles\IS_instance_name\configuration.
To configure the total size of the logs as 300 MB, add the following properties and its values as suggested in custom_wrapper.conf log file and save it.wrapper.logfile.maxfiles=30 wrapper.logfile.maxsize=10MB
Terracotta
Software AG recommends the following logging guidelines for Terracotta server and client to enable automatic log rotation.
- Server log
- Log level of the
Terracotta
server.
Logs at the server side server-logs are located at SAGInstallDirectory\tsa.
To configure the total size of the logs as 10 GB, set the following value in server-logs file and save the file.<property name="reconnect.maxLogFileSize" value="512"/>
- Client log
- Log level information at client side about the client and server
interaction.
Logs at the client side are located at SAGInstallDirectory\IntegrationServer\instances\instance_name\logs.
To configure the total size of the logs as 10 GB, set the following value in the client log file:<property name="logging.maxBackups" value="20"/>
API Data Store (Elasticsearch)
Software AG recommends the following logging guidelines for Elasticsearch to enable automatic log rotation. For more information about Elasticsearch, see Elasticsearch documentation.
- elasticsearch.log
- Log level of Elasticsearch.
Elasticsearch log file log4j2.properties is located at SAGInstallDirectory\InternalDataStore\config.
Software AG recommends you to set the following properties for the rolling file on log4j2.properties.
#Condition and Action to apply when handling roll overs appender.rolling.strategy.action.condition.nested_condition.type = IfAny #Perform the actions only if you have accumulated too many logs appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize # The size condition on the compressed logs is 512 MB appender.rolling.strategy.action.condition.nested_condition.exceeds = 512MB # A nested condition to apply to files matching the glob appender.rolling.strategy.action.condition.nested_condition.lastMod.type = IfLastModified # Retains logs for seven days appender.rolling.strategy.action.condition.nested_condition.lastMod.age = 7D
The properties for the old style pattern appenders is as follows. If the log4j2.properties in your system uses the old style layout of appenders, set the configurations for the following properties. Note that these should be considered as deprecated and can be removed in the future.
appender.rolling_old.strategy.action.condition.nested_condition.type = IfAny appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 512MB appender.rolling_old.strategy.action.condition.nested_condition.lastMod.type = IfLastModified appender.rolling_old.strategy.action.condition.nested_condition.lastMod.age = 7D
If the file size is 512MB or last modified date is 7D, log rotation is enabled.
A sample configuration is as follows:
status = error # log action execution errors for easier debugging logger.action.name = org.elasticsearch.action logger.action.level = debug appender.rolling.type = Console appender.rolling.name = rolling appender.rolling.layout.type = ESJsonLayout appender.rolling.layout.type_name = server appender.rolling.strategy.action.condition.nested_condition.type = IfAny appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize appender.rolling.strategy.action.condition.nested_condition.exceeds = 512MB appender.rolling.strategy.action.condition.nested_condition.lastMod.type = IfLastModified appender.rolling.strategy.action.condition.nested_condition.lastMod.age = 7D appender.rolling_old.strategy.action.condition.nested_condition.type = IfAny appender.rolling_old.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize appender.rolling_old.strategy.action.condition.nested_condition.exceeds = 512MB appender.rolling_old.strategy.action.condition.nested_condition.lastMod.type = IfLastModified appender.rolling_old.strategy.action.condition.nested_condition.lastMod.age = 7D rootLogger.level = info rootLogger.appenderRef.rolling.ref = rolling appender.deprecation_rolling.type = Console appender.deprecation_rolling.name = deprecation_rolling appender.deprecation_rolling.layout.type = ESJsonLayout appender.deprecation_rolling.layout.type_name = deprecation logger.deprecation.name = org.elasticsearch.deprecation logger.deprecation.level = warn logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling logger.deprecation.additivity = false appender.index_search_slowlog_rolling.type = Console appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling appender.index_search_slowlog_rolling.layout.type = ESJsonLayout appender.index_search_slowlog_rolling.layout.type_name = index_search_slowlog logger.index_search_slowlog_rolling.name = index.search.slowlog logger.index_search_slowlog_rolling.level = trace logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling logger.index_search_slowlog_rolling.additivity = false appender.index_indexing_slowlog_rolling.type = Console appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling appender.index_indexing_slowlog_rolling.layout.type = ESJsonLayout appender.index_indexing_slowlog_rolling.layout.type_name = index_indexing_slowlog logger.index_indexing_slowlog.name = index.indexing.slowlog.index logger.index_indexing_slowlog.level = trace logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling logger.index_indexing_slowlog.additivity = false
Note: Log4j’s configuration parsing does not recognize extraneous whitespaces. Ensure to trim any leading and trailing whitespace when you copy the configurations.
Kibana
Software AG recommends the following logging guidelines for Kibana to enable automatic log rotation. For more information about Kibana, see https://www.elastic.co/guide/en/kibana/current/introduction.html.
- kibana.log
- Log level of Kibana.
Kibana log file kibana.yml is located at SAGInstallDirectory\profiles\IS_instance_name\apigateway\dashboard\config or Kibana_InstallDirectory\config.
To configure the total size of the logs as 300 MB, add the following properties and its values in kibana.yml log file and save it.
#Enables you to specify a file location where Kibana should store the log output. logging.dest = <kibana_logfile_location>/kibana.log #Enables the rotation of the logs logging.rotate.enabled = true logging.rotate.everyBytes = 10485760 logging.rotate.keepFiles = 30 logging.rotate.usePolling = true
A sample configuration is as follows:
server.name: apigw-kibana-{{ .Values.tenantName }}-107-0 server.host: "0.0.0.0" server.port: 9405 elasticsearch.hosts: [ "http://apigw-{{ .Values.tenantName }}-es-107-svc:80" ] console.enabled: false server.basePath: "/apigatewayui/dashboardproxy" kibana.index: "gateway_{{ .Values.tenantName }}_dashboard" logging.dest: "kibana.log" logging.rotate.enabled: true logging.rotate.everyBytes: 10485760 logging.rotate.keepFiles: 30 logging.rotate.usePolling: true elasticsearch.requestTimeout: 90 telemetry.enabled: false