.. ============LICENSE_START========================================== .. =================================================================== .. Copyright © 2017 AT&T Intellectual Property. All rights reserved. .. =================================================================== .. Licensed under the Creative Commons License, Attribution 4.0 Intl. (the "License"); .. you may not use this documentation except in compliance with the License. .. You may obtain a copy of the License at .. .. https://creativecommons.org/licenses/by/4.0/ .. .. Unless required by applicable law or agreed to in writing, software .. distributed under the License is distributed on an "AS IS" BASIS, .. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. .. See the License for the specific language governing permissions and .. limitations under the License. .. ============LICENSE_END============================================ .. ECOMP is a trademark and service mark of AT&T Intellectual Property. APPC Logging Guide ================== The APPC modules manage logging functionality according to the logging configuration file ``org.ops4j.pax.logging.cfg``. APPC configuration defines the location of the logging configuration file. Each APPC module configured to generate logs reads the configuration file periodically and generates logs according to the current logging level. Logging Architecture --------------------- The following diagram illustrates the APPC logging architecture. |image0| Log Types --------- APPC generates several types of logs to capture information needed to operate, troubleshoot, and report on performance: - **Audit Log**: The Audit Log provides a summary view of the processing of a request – a transaction – within an application. It captures activity requests received by APPC and includes such information as the time the activity initiated, when it finishes, and the API invoked at the component. - **Metric Log**: The Metrics Log provides a more detailed view into the processing of a transaction within APP-C. It captures the beginning and ending of activities necessary to complete the transaction within APPC modules, for example, the Dispatcher module, and other ONAP components such as A&AI. - **Error Log**: The Error Log captures INFO, WARN, ERROR, and FATAL conditions sensed (“exception handled”) by the APPC software components. - **Debug Log**: The optional Debug Log captures data that may be required to debug and correct abnormal conditions of the application. The APPC modules manage logging functionality according to the logging configuration file ``org.ops4j.pax.logging.cfg``. APPC configuration defines the location of the logging configuration file. Each APPC module configured to generate logs reads the configuration file periodically and generates logs according to the current logging level. Logging Levels ~~~~~~~~~~~~~~ +-------------+----------------+---------------+-------------+-------------+------------+ | **Level** | **Log type** | +=============+================+===============+=============+=============+============+ | | | **Errors** | +-------------+----------------+---------------+-------------+-------------+------------+ | | **Audit** | **Metrics** | **FATAL** | **ERROR** | **WARN** | +-------------+----------------+---------------+-------------+-------------+------------+ | OFF | No | No | No | No | No | +-------------+----------------+---------------+-------------+-------------+------------+ | FATAL | Yes | Yes | Yes | No | No | +-------------+----------------+---------------+-------------+-------------+------------+ | ERROR | Yes | Yes | Yes | Yes | No | +-------------+----------------+---------------+-------------+-------------+------------+ | WARN | Yes | Yes | Yes | Yes | Yes | +-------------+----------------+---------------+-------------+-------------+------------+ Response Codes ~~~~~~~~~~~~~~ +----------------------------+--------------------------------+ | **Response code ranges** | **Error type** | +============================+================================+ | 100-199 | Permission errors | +----------------------------+--------------------------------+ | 200-299 | Availability errors/Timeouts | +----------------------------+--------------------------------+ | 300-399 | Data errors | +----------------------------+--------------------------------+ | 400-499 | Schema errors | +----------------------------+--------------------------------+ | 500-599 | Business process errors | +----------------------------+--------------------------------+ | 900-999 | Unknown errors | +----------------------------+--------------------------------+ Logging Output --------------- APPC generates logging output according to Event and Error Logging Framework(EELF)requirements in the following format: Error Log ~~~~~~~~~~ +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Field** | **Description** | +=========================+=================================================================================================================================================================================================================================================+ | Timestamp | Date-time when error occurs in UTC. | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | RequestID | Universally unique transaction requestID (UUID). | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ThreadId | Blank | | | | | | This traces processing of a request over a number of threads of a single ONAP component. | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ServiceName | Externally advertised API invoked by clients of this component, for example, "Audit", "HealthCheck". | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | PartnerName | Client or user invoking the API. | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TargetEntity | ONAP component/subcomponent or non-ONAP entity invoked for this suboperation’s activities, for example, A&AI, VF, VM, MySql. | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TargetServiceName | Known name of External API/operation activities invoked on TargetEntity (ONAP component/subcomponent or non-ONAP entity), for example, VM UUID, VF UUID. | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ErrorCategory | WARN or ERROR | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ErrorCode | Code representing the error condition according to the error categories. | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ErrorDescription | Human readable description of the error - Error name, for example: "CONFIGURATION\_STARTED". | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | detailMessage | This field may contain any additional information useful in describing the error condition, for example: | | | | | | ``Application Controller (APP-C) initialization started at {0}|\`` | | | ``No resolution is required, this is an informational message|\`` | | | ``The APP-C component configuration has been started because the component is being initialized or loaded for the first time, or a new instance of the component is being created. This message indicates that the component is starting.`` | +-------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Debug Log ~~~~~~~~~ +-----------------+------------------------------------------------------------+ | **Field** | **Description** | +=================+============================================================+ | Timestamp | Date-time of the log record. | +-----------------+------------------------------------------------------------+ | RequestID | Universally unique transaction requestID (UUID). | +-----------------+------------------------------------------------------------+ | DebugInfo | Debug Information | +-----------------+------------------------------------------------------------+ | End of Record | Designates the logical end of a multi-line debug record. | +-----------------+------------------------------------------------------------+ Audit Log ~~~~~~~~~ +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Field** | **Description** | +======================================+===========================================================================================================================================================================================================+ | BeginTimestamp | Date-time of the start of a request activity. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EndTimestamp | Date-time of the end of a request activity. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | RequestID | Universally unique transaction request ID (UUID). | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | serviceInstanceID | Uniquely identifies a service instance, for example, “service graph”. The primary key, for example, in A&AI, to reference or manage the service instance as a unit. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | threadId | Empty | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | physical/virtual server name   | Empty (the value added by the log files collecting agent). | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | serviceName  | Externally advertised API invoked by clients of this component, for example, "Audit", "HealthCheck". | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | PartnerName | Client or user invoking the API.   | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | StatusCode | High-level success or failure of the request (COMPLETE or ERROR). | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ResponseCode | Application specific response code - LCM API error codes categorized according to the logging categories. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ResponseDescription | Human readable description of the application specific response code, for example, "INVALID INPUT PARAMETER - ${detailedErrorMsg}". | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | instanceUUID | Universally unique identifier to differentiate between multiple instances of the same (named), log writing component - the specific APPC instance UUID. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Category log level | Enum: “INFO” \| “WARN” \|”DEBUG” \| “ERROR” \| “FATAL”. Current log level for the entire APP-C. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Severity | Blank | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Server IP address  | Blank | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ElapsedTime | Elapsed time to complete processing of an API or request at the granularity available to the component system. This value should be the difference between BeginTimestamp and EndTimestamp fields.  | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Server | VM FQDN if virtualized, otherwise the host name of the logging component.  | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ClientIPaddress | Requesting remote client application’s IP address if known, otherwise empty. | +--------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Metrics Log ~~~~~~~~~~~ +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | **Field** | **Description** | +===============================================+==================================================================================================================================================================================================================+ | BeginTimestamp | Date-time when a suboperation activity is begun in UTC | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EndTimestamp | Date-time when a supoperation activity is completed in UTC | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | RequestID | Universally unique transaction request ID (UUID) | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | serviceInstanceID       | VMUUID, VFUUID | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | threadId | Optional | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | physical/virtual server name | Empty if its value can be added by the log files collecting agent. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | serviceName | For example: "Audit", "HealthCheck" etc | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | PartnerName Client or user invoking the API | | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TargetEntity  | APPC internal subcomponent, for example, MD-SAL, or external component, for example, A&AI, SSH, Netconf, invoked for this suboperation. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TargetServiceName   | Operation activities invoked on TargetEntity e.g. A&AI GET generic- vnf | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | StatusCode | High level success or failure of the suboperation activities (COMPLETE or ERROR) | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ResponseCode | Specific response code returned by the suboperation activities. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ResponseDescription | Human readable description of the response code. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | instanceUUID  | APPC instance ID. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Category log level | Enumerated values: “INFO” \| “WARN” \|”DEBUG” \| “ERROR” \| “FATAL”. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Severity | Empty | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Server IP address | The logging component host server’s IP address. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ElapsedTime | Elapsed time to complete processing of the sub operation activities at the granularity available to the component system.  This value should be the difference between EndTimestamp and BeginTimestamp fields. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Server | VM FQDN if virtualized, otherwise the host name of the logging component. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ClientIP | Requesting remote client application’s IP address. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | class name | Optional. The name of the class that has caused the log record creation. For OO programing languages that support this concept. | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Unused  | | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ProcessKey | Optional | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TargetVirtualEntity | Empty | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CustomField1 | Empty (specific attributes exposed by developers) | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CustomField2 | Empty | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CustomField3 | Empty | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | CustomField4 | Empty | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | detailMessage | Empty | +-----------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Log File Locations ------------------ The logging configuration file, ``org.ops4j.pax.logging.cfg`` are located in appc Git repository: ``/appc/appc-common/src/main/resources/org/onap/appc/org.ops4j.pax.logging.cfg`` The logs are stored at the location defined by the appropriate appender: ``log4j.appender.error.File=${karaf.data}/log/APPC/appc-error.log`` ``log4j.appender.debug.file=${karaf.data}/log/APPC/appc-debug.log`` ``log4j.appender.metric.File=${karaf.data}/log/APPC/appc-metric.log`` ``log4j.appender.audit.File=${karaf.data}/log/APPC/appc-audit.log`` Enabling APPC Logging ---------------------- APPC uses Event and Error Logging Framework (EELF) for application logs. To enable EELF logging: 1. Replace the default configuration file located at ``/opt/opendaylight/current/etc/org.ops4j.pax.logging.cfg`` with the configuration file that is checked into git: ``/appc/appc-common/src/main/resources/org/onap/appc/org.ops4j.pax.logging.cfg`` 2. Stop and restart ODL controller for the configuration changes to take effect. 3. Verify logging changes at the following log paths: - ``/opt/opendaylight/current/data/log/eelf/karaf.log`` This log contains the regular karaf.log output reformatted to use the EELF MDC properties and the pattern that is configured in the ``org.ops4j.pax.logging.cfg`` file. - ``/opt/opendaylight/current/data/log/APPC/`` This directory contains the audit, metric, error, and debug logs that are configured in the ``org.ops4j.pax.logging.cfg`` file. **Note:** ``/opt/opendaylight/current/data/log/APPC/controller`` contains the logs generated from the package ``org.openecomp.\*`` (all APPC logs) - Error.log: alarms –ERROR level logs and above - Info.log: INFO level logs only - Debug.log: debugging – DEBUG level and above - Audit – AUDIT level and above Log Rotation ------------ Log rotation is performed after every 100 MB size limit is reached. The log rotation interval is defined as part of the EELF framework. .. |image0| image:: APPCLoggingArchitecturediagram.png :width: 6.49097in :height: 3.46181in