Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Configuring logging is covered  Zone Management: Logging page.

Logging

YOUnite Uses Elastic

Younite logs directly to elastic via the elastic restful API.

All activity through the mdm restful API is logged synchronously, if elastic is down, calls to the api will

Configuring logging is covered  Deploying Logging page.


Logging

Table of Contents

YOUnite Uses Elastic

YOUnite uses the Open Source Elastic Stack (https://www.elastic.co/products) to log (Logstash), search (Elasticsearch), analyze and visualize (Kibana) all API requests and message bus traffic (most notably all data events).

YOUnite logs directly to Elastic via Elastic's RESTtful API.

All activity is logged asynchronously. If Elastic is down, calls to the API fail with forbidden (403) errors. Once elastic Elastic is available again, the API will function again.

All activity in internal services are logged (a?)synchronously. If elastic is down these will still succeed, but there will be no logging. This may be changed in the future to use AMQ so as to not drop log entries if elastic is down.

All activity on the the message queue for the router will be logged (a?)synchronously, this may or may not include the payload, depending on configuration.

Per Resource Indices

Each resource's log entries are kept in separate indices that are created either when the resource is created or when the resource is accessed, depending on the type of resource. Index names always start with "mdm-", this is used for both easy identification, and to take advantage of the ability to configure elastic to forbid creation of indexes on the fly when the first data entry is posted to it. This allows the logging system to be in control of creating indices and mappings as needed.

Resource indices are created with the naming pattern "mdm-RESOURCE-UUID" where RESOURCE is the type of resource and, UUID is the zone's public facing UUID identifier. E.g. mdm-zone-a2aaedc7-591a-4761-8e35-da875b1e6ac5

Per User (AuthIdentity) Alias's

Alias's are created for the purposes of grouping indices together for ease of use in creating templates in Kibana for dashboards and views that are available through the younite web application.

Alisas names are of the pattern mdm-alias-userUUID where userUUID is the public facing UUID identifier of the authIdentity

What Gets Logged

Currently logged, for API access, is the date/time, the api path, resource type (matches the index type e.g. mdm-zone is resource type zone, mdm-domain is resource type domain), resource UUID,whether the access was allowed or rejected via ouath, the ssoid of the oauth token presented for access, and the operation type (GET,PUT,DELETE, etc)

Currently logged for resource service layer (internal, used by both the api and the message router) is CRUD access to the resource. The ssoid, timetamp,resource type (same as the index type), resource UUID, and action (C,R,U,D).

Logging at the messagebus/router layer goes here...

Either of these current logging entries can be easily extended to log additional request data (the object model being created,updated, etc) or response data (results object model of a get, etc...) for complete auditing of not only who made the modification, but what the modification was. This could be done for the entire resource spectrum , or only specific resources. If needed the payload data could be easily logged to separate index requiring extended permissions for access.

How it is secured

Elastic and Kibana are secured via an nginx proxy that authorizes each request via the Ouath. An OAuth bearer token is carried along on each request via cookie when the user clicks the link in the application dashboard to bring up a kibana based view or dashbord page. This secures access to elastic and kibana from the public internet. If needed the proxy piece could be integrated with elastic in a single container to provide tighter security. This was not done in the dev environment, for ease of development and testing, but could be done easily for a stand alone elastic server(s).

Kibana

When a user clicks a link to display logging information via kibana, the url is modified as it is passed through authorization code in the nginx proxy. The modification uses the information in the oauth check_token response to pass along the elastic alias that kibana will use to populate the data in the dashboard. Access to kibana is allowed if a user has the correct scope for access to kibana. By default all users have this scope. Logging information that is displayed/available is controlled through the usage of either the alias for users uuid, which contains all the indices they have access to, or via kibana searches hitting specfic indices which the user has permissions for directly (also encoded in the oauth token) 

Elastic

Elastic is secured via the same nginx proxy that protects kibana. Permissions to allow read access to an index or controlled via the same permissions mechanism in the token that is used to allow access for that user to the younite API. If a user has GET or ALL permissions to a zone, they have read only access to the data in the index in elastic for the same zone.

Image Removed

Notifications

For more information goto

Highlevel discussion on what sort of notifications get sent out and how we leverage webhooks.functionality returns. In a production environment it is strongly recommended that Elastic is run as a highly-available, three-node cluster.

This page explains events that are logged and the fields and data values used in logging. As a YOUnite user, you can perform searches on requests and data events across the entire MDM ecosystem from a single dashboard.

Why Centralized Logging?

Having a centralized logging platform is critical in an MDM ecosystem because from a single dashboard, it allows:

  • API consumers to debug and validate requests/responses
  • Data Governance Stewards, DBAs, and similar data-focused staff to trace data origins and updates
  • IT staff to track usage

What Gets Logged?

  • All API requests made to YOUnite
  • All data events:
    • API requests made to the /drs endpoint
      • Callbacks generated by POST /drs/uuid/assembler 
    • Data events generated by adaptors
    • Data event routing to adaptors
    • Data event assembling
  • Adaptor initialization

For a complete listing of what gets logged, the fields used including the data values that are used for specific fields - see the Logging Entries and Fields section below



IMPORTANT: Although YOUnite centrally logs all API requests and data events – for security reasons – it does NOT log the data payloads.


Kibana

There are two logging links in the upper right of the YOUnite UI header:


Image Added


Kibana Discover Page

All MDM events are logged using the fields defined in the Logging Entries and Fields section below. 

Image Added


Kibana uses Lucene's query syntax in the search bar. Once you set the desired Time Range in the upper right corner you can query the central logs for MDM activity (go here for more on how to use the Discover Page).   Following are some examples:

To see all GET data events on an adaptor with the UUID dd6e0bc6-b385-4c3b-b645-85ccd87c47e6:

Code Block
languagetext
method:GET AND destination-adaptor-uuid:dd6e0bc6-b385-4c3b-b645-85ccd87c47e6

To trace a given data record (DR) with the UUID 621a5a25-e95a-475a-abbc-865da254522a:

Code Block
languagetext
resource-uuid:621a5a25-e95a-475a-abbc-865da254522a

To get all requests to the "/api/domains/*/versions" API endpoint and endpoints beneath it:

Code Block
languagetext
request:"/api/domains/*/versions"

Get all data events that attempted to generate new data records (the second example shows only the data events that succeeded):

Code Block
languagetext
method:POST AND data-event-sequence:ORIGINATING AND log-entry-type:MB_REQUEST
method:POST AND data-event-sequence:ORIGINATING AND log-entry-type:MB_REQUEST AND status:MB_REQUEST_SUCCESS 

Same as above but  restricted to a domain version (with UUID d8970cb7-bd6f-4371-8d66-9a66fc81d97f):

Code Block
languagetext
method:POST AND data-event-sequence:ORIGINATING AND log-entry-type:MB_REQUEST AND status:MB_REQUEST_SUCCESS AND domain-version-uuid:d8970cb7-bd6f-4371-8d66-9a66fc81d97f

Same as above but restricted to a given adaptor (with adaptor UUID 64c30e62-b363-4913-9e0a-0e6219b69eee)

Code Block
languagetext
method:POST AND data-event-sequence:ORIGINATING AND log-entry-type:MB_REQUEST AND status:MB_REQUEST_SUCCESS AND domain-version-uuid:d8970cb7-bd6f-4371-8d66-9a66fc81d97f AND source-adaptor-uuid:64c30e62-b363-4913-9e0a-0e6219b69eee

Anchor
dashboard
dashboard
Kibana Dashboard

Image Added

Logging Entries and Fields

The table below is a summary of the MDM events and the values, or "fields," that get logged for each MDM event.

The following is a description of possible log entry data values:

REQUIRED

These required values are used to index log entries:

  • request-type: Requests are either directly related to DATA or other operational events designated as METADATA. See the 949725546 list.
  • resource-type: The API resource type as defined by the API endpoint. See the 949725546 list.
  • zone-uuid: UUID of the zone to which the resource belongs. For API requests, the UUID of the zone the resource belongs to. For adaptor or message bus requests, it's the UUID of the zone that owns the resource that generated the event.
  • hostname: The hostname of the server handling and logging the request.
  • entry-type: A general classification of for log entry types. See the #entry-type list.
  • timestamp: Timestamp of the event.

OPTIONAL

  • method: The API method type called. See the #method list.
  • log-entry-type: Classification of log entry types. See the #log-entry-type list.
  • request: The URI of the API request.
  • network-address: The network address of the server handling and logging the request.
  • ssoid: The API consumer's single sign-on ID.
  • auth-identity-uuid: The UUID of the API consumer (tied to the ssoid). Note that a single auth-identity can be tied to multiple zone users.
  • http-status: The HTTP status code of the API request.
  • data-event-sequence: Federated data events go through a sequence of one or more of these steps:
    • Originating data event
    • Routing data events to adaptors
    • Receiving responses from adaptors for routed data events
    • Assembling responses 

See the #data-event-sequence list.

  • dr-notification-uuid: The UUID of the assembler object. An assembler object is created for requests that pull data from one or more adaptors.
  • data-event-uuid: When it needs to assemble data, a single originating data-event typically generates multiple data-events, each with its own "data-event-uuid", for all appropriate adaptors.
  • source-adaptor-uuid: The adaptor from which a data-event originated.
  • destination-adaptor-uuid: The adaptor to which a data-event is sent.
  • adaptor-capabilities: A list of the adaptor's domain version property-processing capabilities.
  • adaptor-state: The adaptor's state. See the #adaptor-state list.
  • domain-version-uuid: The domain version specified by a data event.
  • resource-uuid: The UUID of the resource the request is operating on.
  • request-uuid: API requests are given a random request UUID.
  • gold-adaptor-uuids: A list of adaptors designated as "gold" in the data request.
  • silver-adaptor-uuids: A list of adaptors designated as "silver" in the data request.
  • status: Status for a non-HTTP event. See the #status list.
  • message: Typically, but not limited to, an error message.


The values on the left table below are used to index log entries and are required. The right table below shows which values are logged for the various MDM events.


REQUIRED: Data Fields Used to Index Log Entries
OPTIONAL:  Log Entry Field Data Values
MDM Events   request-typeresource-typezone-uuidentry-type
methodlog-entry-typerequesttimestampzone-uuidhostnamenetwork-addressauth-identity-uuidhttp-statusdata-event-seqeuencedr-notification-uuiddata-event-uuidsource-adaptor-uuiddestination-adaptor-uuidadaptor-capabilitiesadaptor-statedomain-version-uuidresource-uuidrequest-uuidssoidgold-adaptor-uuidssilver-adaptor-uuidsstatusmessage

API Request (L20)

METADATAyesyesAPIyesAPI_REQUESTyesyesyesyesyesyes









yesyes



Data API Request (L25)DATALimited to DRS or DRS_ASSEMBLERyesAPIyesAPI_REQUESTyesyesyesyesyesyes








yes (dr-uuid)yesyes



API Response (L30)METADATAyesyesAPIyesAPI_REQUEST_SUCCESSyesyesyesyesyesyesyes








yesyes



Data API Response (L35)DATALimited to DRS or DRS_ASSEMBLERyesAPIyesAPI_REQUEST_SUCCESSyesyesyesyesyesyesyes







yes (dr-uuid)yesyes



API Error Response (L40)

METADATAyesyesAPIyesAPI_REQUEST_ERRORyesyesyesyesyesyes yes








 yes yes


yes
Data API Error Response (L45)DATAyesyesAPIyesAPI_REQUEST_ERRORyesyesyesyesyesyes yes







yes (dr-uuid) yes yes


yes
API Request Security Violation (L100)METADATAyesyesAPIyesAPI_REQUEST_ERRORyesyesyesyesyesyesyes








yesyes


yes


MDM Events   request-typeresource-typezone-uuidentry-typemethodlog-entry-typerequesttimestampzone-uuidhostnamenetwork-addressauth-identity-uuidhttp-statusdata-event-seqeuencedr-notification-uuiddata-event-uuidsource-adaptor-uuiddestination-adaptor-uuidadaptor-capabilitiesadaptor-statedomain-version-uuidresource-uuidrequest-uuidssoidgold-adaptor-uuidssilver-adaptor-uuidsstatusmessage
Service Layer POST Assembler Processing (L1)DATADRS_ASSEMBLERyesADAPTORGET1MB_REQUEST
yesyesyesyes

ORIGINATINGyesyes




yes (dr-uuid)
yesoptionaloptionalMB_REQUEST_SUCCESS or MB_REQUEST_ERRORyes (if there is an error)
POST Assembler Routing Events (L2)DATADRS_ASSEMBLERyesADAPTORGET1MB_REQUEST
yesyesyesyes

ROUTEDyesyes
yes

yesyes (dr-uuid)



MB_REQUEST_SUCCESS or MB_REQUEST_ERRORyes (if there is an error)
POST Assembler Routing Event Returned (L3)DATADRS_ASSEMBLERyesADAPTORGET1MB_REQUEST
yesyesyesyes

ROUTED_RETURNEDyesyesyes


yesyes (dr-uuid)



MB_REQUEST_SUCCESS or MB_REQUEST_ERROR

yes (if there is an error)
POST Assembler Callback (L4)DATADRS_ASSEMBLERyesADAPTORGET1MB_REQUEST
yesyesyesyes

ASSEMBLEDyesyesyes


yesyes (dr-uuid)



MB_REQUEST_SUCCESS or MB_REQUEST_ERRORyes (if there is an error)


MDM Events  request-typeresource-typezone-uuidentry-typemethodlog-entry-typerequesttimestampzone-uuidhostnamenetwork-addressauth-identity-uuidhttp-statusdata-event-seqeuencedr-notification-uuiddata-event-uuidsource-adaptor-uuiddestination-adaptor-uuidadaptor-capabilitiesadaptor-statedomain-version-uuidresource-uuidrequest-uuidssoidgold-adaptor-uuidssilver-adaptor-uuidsstatusmessage
PUT, POST, DELETE Event Received From Adaptor (L5)DATADRS_ASSEMBLERyesADAPTORPUT, POST or DELETEMB_REQUEST
yesyesyesyes

ORIGINATINGyesyesyes


yesyes (dr-uuid for PUT and DELETE and null for POST)



MB_REQUEST_SUCCESS or MB_REQUEST_ERRORyes (if there is an error)
PUT, POST, DELETE Event Routed to Adaptor (L6)DATADRS_ASSEMBLERyesADAPTORPUT, POST or DELETEMB_REQUEST
yesyesyesyes

ROUTEDyesyesyesyes

yesyes (dr-uuid)



MB_REQUEST_SUCCESS or MB_REQUEST_ERRORyes (if there is an error)


Adaptor Registration (L10)METADATAADAPTORSyesADAPTORADAPTOR_STATEMB_REQUEST
yesyesyesyes




yes
yesyes (See "ADAPTOR STATES" list)





MB_REQUEST_SUCCESS or MB_REQUEST_ERRORyes (if there is an error)

1 POST /drs/uuid for a FEDERATED domain version is used in place of a GET /drs/uuid (used for an MDM_DATA_STORE domain version) since assembling a data record takes extra processing. Logically it is a GET, and governance permissions treat POST /drs/uuid as a GET.

Data Field Values


Section


Column
width20%


request-type
METADATA
DATA



Column
width20%


resource-type       

ZONES                  

DOMAINS             

SCHEMAS

DRS

ACLS

ADAPTORS

RESOURCES

DRS_ASSEMBLER



Column
width20%


entry-type
API
ADAPTOR
MB
SERVICE



Column
width20%


method

GET

PUT
POST
DELETE
PATCH
ADAPTOR_STATE




Section



Column
width20%


log-entry-type

API_REQUEST

API_REQUEST_SUCCESS

API_REQUEST_ERROR

API_WEBSOCKET

API_WEBSOCKET_SUCCESS

API_WEBSOCKET_ERROR

API_WEBHOOK

API_WEBHOOK_SUCCESS

API_WEBHOOK_ERROR

MB_REQUEST

MB_REQUEST_SUCCESS

MB_REQUEST_ERROR

MB_RESPONSE

MB_RESPONSE_SUCCESS

MB_RESPONSE_ERROR



Column
width20%


status

MB_REQUEST_SUCCESS

MB_REQUEST_ERROR

MB_RESPONSE_SUCCESS

MB_RESPONSE_ERROR



Column
width20%


data-event-sequence

ORIGINATING

ROUTED

ROUTED_RETURNED

ASSEMBLED



Column
width20%


adaptor-state
ADAPTOR_POSTED
ADAPTOR_ERROR
ADAPTOR_INVALID_CAPABILITIES
ADAPTOR_CONFIGURES
ADAPTOR_PAUSE
ADAPTOR_PLAY
ADAPTOR_PLAY_RO (READY ONLY)




Image Modified