Page History
| Navitabs | ||||||
|---|---|---|---|---|---|---|
| ||||||
Indhold
| Table of Contents |
|---|
Indledning
Læsevejledning
Læseren forventes at have kendskab til National Sundheds-IT's platform NSP, samt generelt kendskab til WildFly applikation server, MariaDB og java.
Dokumenthistorik
...
Version
...
Dato
...
Ansvarlig
...
Beskrivelse
...
1.3
...
28-10-2017
...
Openminds
...
Beskrivelse af organisation job
...
1.2
...
Openminds
...
Beskrivelse af clean up job
Definitioner og forkortelser
Definition | Beskrivelse |
NSP | Den nationale service platform (inden for sundheds-IT) |
Monitoreringssnitflade
Løsningen kan overvåges med:
http://<server>:<port>/minlog2-registration/monitor http://<server>:<port>/minlog1-registration/monitor |
som svarer HTTP OK tilbage, hvis alt fungerer. Dette kald verificerer services samt databaseadgang.
Generel overvågningsflade
Det er muligt at få vist yderligere detaljer med:
http://<server>:<port>/minlog1-registration/monitor?details |
Denne viser status for eventuelle services og konfigurationer.
Version
Løsningernes versioner kan vises med:
http://<server>:<port>/minlog1-registration/version |
Der er intet krav om at versionerne skal "følges" ad – således kan eksempelvis "Registration 2.0.1 godt fungere sammen med Lookup 2.5.1. Det bør tilstræbes at versionerne er det samme.
Service snitflade
Løsningerne tilgås på
...
1.1
...
26-06-2017
...
Openminds
...
Nærmere specificering af Logning
...
1.0
...
09-06-2017
...
Openminds
Definitioner og forkortelser
...
Definition
...
Beskrivelse
...
NSP
...
Den nationale service platform (inden for sundheds-IT)
Monitoreringssnitflade
Løsningen kan overvåges med:
http://<server>:<port>/minlog2-registration/monitorRegisterService http://<server>:<port>/minlog1-registration/monitor |
som svarer HTTP OK tilbage, hvis alt fungerer. Dette kald verificerer services samt databaseadgang.
Generel overvågningsflade
Det er muligt at få vist yderligere detaljer med:
...
http://<server>:<port>/minlog1-registration/monitor?details
RegisterService |
Funktionalitet
Servicene stiller metoder til rådighed til at registrere cpr relaterede hændelser.
Adgang er håndteret med IDCard. Der kan jf. Netic etableres blacklistning i HAProxy og/eller firewall på NSP'erne.
Håndtering af fejlsituationer
De eneste eksterne afhængigheder er til databaser. Det må derfor forventes, at den mest sandsynlige kilde til fejlsituationer er problemer med databaseadgang. Det forudsættes at databaseskema, tabeller og brugere herunder rettighederne er på plads:
- SELECT
- INSERT
- UPDATE
- DELETE
Dette vil fremgå af overvågningsfladen og detaljer vil være tilgængelige i applikationsloggen. Yderligere fejl vil også kunne spores i applikationsloggen.
Logfiler
Registration og Lookup har eget sæt af logfiler – alle placeret i <jboss>/standalone/logs. SLA logning sker til en særlig fil – "nsputil-sla-minlog2.log". Derudover kan der forekomme logning til server.log.
- minlog2-registration-application
- minlog2-registration-audit
Logformaterne kan findes i log4j filerne som er placeret i Wildfly – se konfigurationer – og hjælp til patterns kan findes i forbindelse med Log4J:
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html
SLA log
nsputil-sla-minlog2.log indeholder SLA loggen. Loggen indeholder målepunkter for service- og Kafka kald. Kaldet til Kafka foregår inden for servicekaldet og har til formål at gøre det synligt, hvor tiden går.
Logpunkter til servicekald benytter soap operationen som Logpoint og LogPointUniqId, mens database-og kafkakald benytter "Operation" som Logpoint og en tekstuel beskrivelse af opslaget som LogPointUniqId
Service- og databasekald er korrelerede med messageID.
Eksempel GetLogStatementForCPRPerson udløser flere databasekald: Et hvor logentries slåes op, et hvor personnavn hentes fra Stamdata og et opslag på organistationsid'et.
Alle 3 logpunkter deler Messageid hentet fra SOAP headeren.
...
Version
Løsningernes versioner kan vises med:
...
http://<server>:<port>/minlog1-registration/version
Der er intet krav om at versionerne skal "følges" ad – således kan eksempelvis "Registration 2.0.1 godt fungere sammen med Lookup 2.5.1. Det bør tilstræbes at versionerne er det samme.
Service snitflade
Løsningerne tilgås på
...
http://<server>:<port>/minlog1-registration/RegisterService
Funktionalitet
Servicene stiller metoder til rådighed til at registrere cpr relaterede hændelser.
Adgang er håndteret med IDCard. Der kan jf. Netic etableres blacklistning i HAProxy og/eller firewall på NSP'erne.
Håndtering af fejlsituationer
De eneste eksterne afhængigheder er til databaser. Det må derfor forventes, at den mest sandsynlige kilde til fejlsituationer er problemer med databaseadgang. Det forudsættes at databaseskema, tabeller og brugere herunder rettighederne er på plads:
- SELECT
- INSERT
- UPDATE
- DELETE
Dette vil fremgå af overvågningsfladen og detaljer vil være tilgængelige i applikationsloggen. Yderligere fejl vil også kunne spores i applikationsloggen.
Logfiler
Registration og Lookup har eget sæt af logfiler – alle placeret i <jboss>/standalone/logs. SLA logning sker til en særlig fil – "nsputil-sla-minlog2.log". Derudover kan der forekomme logning til server.log.
- minlog2-registration-application
- minlog2-registration-audit
Logformaterne kan findes i log4j filerne som er placeret i Wildfly – se konfigurationer – og hjælp til patterns kan findes i forbindelse med Log4J:
...
SLA log
nsputil-sla-minlog2.log indeholder SLA loggen. Loggen indeholder målepunkter for service- og Kafka kald. Kaldet til Kafka foregår inden for servicekaldet og har til formål at gøre det synligt, hvor tiden går.
Logpunkter til servicekald benytter soap operationen som Logpoint og LogPointUniqId, mens database-og kafkakald benytter "Operation" som Logpoint og en tekstuel beskrivelse af opslaget som LogPointUniqId
Service- og databasekald er korrelerede med messageID.
Eksempel GetLogStatementForCPRPerson udløser flere databasekald: Et hvor logentries slåes op, et hvor personnavn hentes fra Stamdata og et opslag på organistationsid'et.
Alle 3 logpunkter deler Messageid hentet fra SOAP headeren.
2017-06-26 08:22:05,751 [default task-4] INFO dk.sdsd.nsp.slalogdata - LogPoint="DB_Operation" LogPointUniqId="lookupPersonName" StartTime="2017-06-26 08:22:05.750" EndTime="2017-06-26 08:22:05.750" Duration="767 microseconds" MessageId="AAABXOMQcV1mt6jYItbXz1NPU0k=" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="<empty>" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(0)= { } |
2017-06-26 08:22:05,751 773 [default task-4] INFO dk.sdsd.nsp.slalogdata - LogPoint="DB_Operation" LogPointUniqId="lookupPersonNamegetLogStatements" StartTime="2017-06-26 08:22:05.750141" EndTime="2017-06-26 08:22:05.750773" Duration="767 632086 microseconds" MessageId="AAABXOMQcV1mt6jYItbXz1NPU0k=" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>" SOAPOperation="<empty>" SOAPEndpoint="<empty>" SOAPAction="<empty>" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(0)= { } 2017-06-26 08:22:05,773 997 [default task-4] INFO dk.sdsd.nsp.slalogdata - LogPoint="DB_Operationminlog2.GetLogStatementsForCPRPerson" LogPointUniqId="getLogStatementsminlog2.GetLogStatementsForCPRPerson" StartTime="2017-06-26 08:22:0504.141657" EndTime="2017-06-26 08:22:05.773997" Duration="632086 1340017 microseconds" MessageId="AAABXOMQcV1mt6jYItbXz1NPU0k=" RequestSize=0 ReplySize=0 Result=OK ClientIP="<empty>127.0.0.1" SOAPOperation="<empty>GetLogStatementsForCPRPerson" SOAPEndpoint="<empty>http://localhost:8080/minlog2-lookup/LookupService" SOAPAction="<empty>GetLogStatementsForCPRPerson" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(0)= { } 2017-06-26 08:22:05,997 [default task-4] INFO dk.sdsd.nsp.slalogdata - LogPoint="minlog2.GetLogStatementsForCPRPerson" LogPointUniqId="minlog2.GetLogStatementsForCPRPerson" StartTime="2017-06-26 08:22:04.657" EndTime="2017-06-26 08:22:05.997" Duration="1340017 microseconds" MessageId="AAABXOMQcV1mt6jYItbXz1NPU0k=" RequestSize=0 ReplySize=0 Result=OK ClientIP="127.0.0.1" SOAPOperation="GetLogStatementsForCPRPerson" SOAPEndpoint="http://localhost:8080/minlog2-lookup/LookupService" SOAPAction="GetLogStatementsForCPRPerson" TargetSOAPOperation="<empty>" TargetSOAPEndpoint="<empty>" GenericCallParms(0)= { } |
Audit log
Audit-logning foretages med det officielle "NSP Audit API" modul.
Der laves audit-logning i:
- lookup
- registration
Informationer, der logges:
...
Komponent
...
Kontekst
...
Type
...
Nøgle
...
Information
...
Audit log
Audit-logning foretages med det officielle "NSP Audit API" modul.
Der laves audit-logning i:
- lookup
- registration
Informationer, der logges:
Komponent | Kontekst | Type | Nøgle | Information |
|---|---|---|---|---|
| MinLog2 | LookupRequest | SensitivePersonalInformation | Caller | "Caller" hvem der har kaldt |
| MinLog2 | LookupRequest | SensitivePersonalInformation | Params | "Params" en json repræsentation af inputparametre |
| MinLog2 | addRegistrations | SensitivePersonalInformation | personIdentifier | cprnr. på den borger der bliver registreret data for |
| MinLog2 | addRegistrations | NonPersonalInformation | schemaVersion | Hvilken skemaversion af snitfladen der kaldes |
Eksempler fra auditloggen:
| Code Block | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
{
"time": "2022-06-13T14:49:29.09Z",
"category": "dk.sds.nsp.audit.log.minlog2",
"audit": {
"timestamp": "2022-06-13T16:49:29.046+02:00",
"components": [
{
"component": "MinLog2",
"contexts": [
{
"context": "LookupRequest",
"information": [
{
|
Eksempler fra auditloggen:
| Code Block | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
{ "time": "2022-06-13T14:49:29.09Z", "category": "dk.sds.nsp.audit.log.minlog2", "audit": { "timestamp": "2022-06-13T16:49:29.046+02:00", "components": [ { "componentkey": "MinLog2Caller", "contexts": [ "type": "SPI", { "contextvalue": "LookupRequest1010780337", "information": [ }, { "key": "CallerParameters", "type": "SPI", "value": "1010780337NA" }, ] { } "key": "Parameters",] } ] }, "access": { "typecode": "SPI"200, "duration": 39, "httpHeaders": { "valueContent-Type": "NA"text/xml; charset=UTF-8", "SOAPAction": "\"GetLogStatementsForCPRPersonWithID\"" }, "httpHost": "localhost", ]"idCardAttributes": { }"dk:gov:saml:attribute:AssuranceLevel": "3", ]"dk:gov:saml:attribute:CprNumberIdentifier": "1010780337", }"dk:gov:saml:attribute:SpecVer": "DK-SAML-2.0" ]}, }, "accessmethod": {"POST", "path": "code": 200"/minlog2-lookupid/LookupidService", "durationquery": 39"", "httpHeadersport": {8081, "Content-Typeprotocol": "text/xml; charset=UTF-8http", "SOAPActionreqSize": "\"GetLogStatementsForCPRPersonWithID\"" }11810, "httpHostresSize": "localhost"21707, "idCardAttributessoapHeaders": { "dk:gov:saml:attribute:AssuranceLevelAudience": "3https://minlog", "dk:gov:saml:attribute:CprNumberIdentifierIssuer": "1010780337TEST2-NSP-STS", "dk:gov:saml:attribute:SpecVerNameID": "C=DK-SAML-2.0" },O=Ingen organisatorisk tilknytning,CN=Lars Larsen,Serial=PID:9208-2002-2-633568693394", "w3Action": "action", "methodw3MessageID": "POST"64d6a252-f391-460c-a90b-1ea7d8512cd8" }, "paththreadId": "/minlog2-lookupid/LookupidServicedefault task-102", "querytime": "2022-06-13T16:49:29.046+02:00", "portstats": 8081,{ "protocolhandlerDuration": "http"3, "reqSizeRequestContentDuration": 118100, "resSizeResponseContentDuration": 217070, "soapHeadersSecurityProtocolRequestDuration": {0, "AudienceSecurityProtocolResponseDuration": "https://minlog"0, "IssuerbufferAllocated": "TEST2-NSP-STS"false, "NameIDusedBuffers": "C=DK,O=Ingen organisatorisk tilknytning,CN=Lars Larsen,Serial=PID:9208-2002-2-633568693394"2, "activeBuffersInPool": 2, "w3ActionidleBuffersInPool": "action",29 } "w3MessageID} } |
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
{ "time": "64d6a2522022-f391-460c-a90b-1ea7d8512cd8" }06-13T14:49:25.078Z", "threadIdcategory": "default task-102","dk.sds.nsp.audit.log.minlog2", "audit": { "timetimestamp": "2022-06-13T16:49:2925.046022+02:00", "statscomponents": [ { "handlerDurationcomponent": 3"MinLog2", "RequestContentDurationcontexts": 0,[ "ResponseContentDuration": 0, { "SecurityProtocolRequestDuration": 0, "SecurityProtocolResponseDurationcontext": 0"LookupRequest", "bufferAllocated": false, "usedBuffersinformation": 2,[ "activeBuffersInPool": 2, "idleBuffersInPool": 29{ } } } | ||||||
| Code Block | ||||||
| ||||||
{ "time": "2022-06-13T14:49:25.078Z", "category": "dk.sds.nsp.audit.log.minlog2", "audit": { "timestamp": "2022-06-13T16:49:25.022+02:00", "key": "Caller", "componentstype": [ "SPI", { "componentvalue": "MinLog246837428", "contexts": [ }, { "contextkey": "LookupRequestParameters", "informationtype": [ "SPI", "value": { "keycprNR": "Caller1908931462", "typefraDato": "SPI"1655131705018, "valuetilDato": "46837428"1655131795018, }, "pageSize": 7, { "pageStartAfter": "c863eb15ad68e490794788e287e9a811738d1d337dd382c2cd1ad0b0" "key": "Parameters", } "type": "SPI", } "value": { ] } "cprNR": "1908931462", ] } ] }, "access": { "fraDatocode": 1655131705018200, "duration": 54, "httpHeaders": { "tilDatoContent-Type": 1655131795018 "text/xml; charset=UTF-8", "SOAPAction": "\"http://nsi.dk/minlog/2014/05/23/ListLogStatements\"" }, "pageSizehttpHost": 7"localhost", "idCardAttributes": { "medcom:CareProviderID": "46837428", "pageStartAftermedcom:CareProviderName": "c863eb15ad68e490794788e287e9a811738d1d337dd382c2cd1ad0b0Statens Serum Institut", "medcom:ITSystemName": "Test", }"sosi:AuthenticationLevel": "3", "sosi:IDCardID": "H/1xienuUQBuWN0tp09auw==", }"sosi:IDCardType": "system", ]"sosi:IDCardVersion": "1.0.1" }, }"method": "POST", ]"path": "/minlog1-lookup/MinlogService", }"query": "", ]"port": 8081, }, "accessprotocol": {"http", "codereqSize": 2006286, "durationresSize": 544706, "httpHeaderssoapHeaders": { "Content-TypeIssuer": "text/xml; charset=UTF-8TEST2-NSP-STS", "SOAPActionMessageID": "\"http://nsi.dk/minlog/2014/05/23/ListLogStatements\"" }, AAABgV2KeRyT/Cd9qHFnA1NPU0k=", "httpHostNameID": "localhost", "idCardAttributes": { "medcom:CareProviderID": "46837428", "medcom:CareProviderName": "Statens Serum Institut", "medcom:ITSystemName": "Test", "sosi:AuthenticationLevel": "3SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXXIV CA, O=TRUST2408, C=DK},CertSerial={1604144225}" }, "threadId": "default task-88", "sosi:IDCardIDtime": "H/1xienuUQBuWN0tp09auw==2022-06-13T16:49:25.022+02:00", "sosi:IDCardType"stats": "system",{ "sosi:IDCardVersionhandlerDuration": "1.0.1", }, "methodRequestContentDuration": "POST"0, "pathResponseContentDuration": "/minlog1-lookup/MinlogService"0, "querySecurityProtocolRequestDuration": ""0, "portSecurityProtocolResponseDuration": 80810, "protocolbufferAllocated": "http"false, "reqSizeusedBuffers": 62861, "resSizeactiveBuffersInPool": 47061, "soapHeadersidleBuffersInPool": {30 "Issuer": "TEST2-NSP-STS", "MessageID": "AAABgV2KeRyT/Cd9qHFnA1NPU0k=", "NameID": "SubjectDN={SERIALNUMBER=CVR:46837428-UID:27910135 + CN=Statens Serum Institut - Test VOCES, O=Statens Serum Institut // CVR:46837428, C=DK},IssuerDN={CN=TRUST2408 Systemtest XXXIV CA, O=TRUST2408, C=DK},CertSerial={1604144225}" }, "threadId": "default task-88", "time": "2022-06-13T16:49:25.022+02:00", "stats": { "handlerDuration": 1, "RequestContentDuration": 0, "ResponseContentDuration": 0, "SecurityProtocolRequestDuration": 0, "SecurityProtocolResponseDuration": 0, "bufferAllocated": false, "usedBuffers": 1, "activeBuffersInPool": 1, "idleBuffersInPool": 30 } } } |
Applikationslog
Filen minlog2-registration-application.log og minlog2-lookup-application.log indeholder applikationsloggen og kan benyttes i fejlsituationer og til statistik. På nuværende tidspunkt anvendes denne primært til logning i forbindelse med batchjob og indlæsning til cache.
...
2017-06-27 11:31:12,535 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] CleanUp job created. 2017-06-27 11:31:12,536 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Set to run at: ScheduleExpression[second=0 minute=/1 hour= dayOfWeek=* dayOfMonth=* month=* year=* start=null end=null timezone=] 2017-06-27 11:31:12,536 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Batch/limitsize: 10000 2017-06-27 11:31:12,536 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Days to remain in database: 730 2017-06-27 11:32:00,031 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Starting cleanup 2017-06-27 11:32:00,157 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Number of old logentries to be deleted are: 0 2017-06-27 11:32:00,160 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Number of remaining old logentries are: 0 2017-06-27 11:32:00,160 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Ending cleanup
}
}
} |
Applikationslog
Filen minlog2-registration-application.log og minlog2-lookup-application.log indeholder applikationsloggen og kan benyttes i fejlsituationer og til statistik. På nuværende tidspunkt anvendes denne primært til logning i forbindelse med batchjob og indlæsning til cache.
2017-06-27 11:31:12,535 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] CleanUp job created. 2017-06-27 11:31:12,536 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Set to run at: ScheduleExpression[second=0 minute=/1 hour= dayOfWeek=* dayOfMonth=* month=* year=* start=null end=null timezone=] 2017-06-27 11:31:12,536 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Batch/limitsize: 10000 2017-06-27 11:31:12,536 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Days to remain in database: 730 2017-06-27 11:32:00,031 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Starting cleanup 2017-06-27 11:32:00,157 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Number of old logentries to be deleted are: 0 2017-06-27 11:32:00,160 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Number of remaining old logentries are: 0 2017-06-27 11:32:00,160 INFO [dk.nsi.minlog2.lookup.controller.CleanUpController] Ending cleanup |
Pool size
Hvis den konfigurede pool størrelse (producer.pool.count) er for lille kan nedenstående error logning ses. Hvis pool size ændres skal servicen genstartes.
Message producer pool empty. Consider increasing property producer.pool.count.
Konfigurationer
Databaseadgang konfigureres i datasource filer i:
|
SLA log og øvrige konfigurationer (log og systemspecifikke konfigurationer) findes i:
|
Se i øvrigt installationsvejledningen.
Whitelisting
For at et anvender kan kalde en bestemt registration-snitflade, skal de whitelistes først. Dette gøres enten på deres CVR-nummer eller via et certifikats SSN som indsættes i whitelisting-tabellen.
Eksempler:
| Code Block | ||
|---|---|---|
| ||
INSERT INTO whitelisting (operation, identification_type, identification, note) VALUES ('registration', 'SSN', 'UI:DK-O:G:8d3fa047-c77e-47e4-bdd2-e91488610ce6', 'En note');
INSERT INTO whitelisting (operation, identification_type, identification, note) VALUES ('registration', 'CVR', '33257872', 'En note'); |
Der whitelistes altid på en bestemt version af en registration-snitflade. Herunder er de registration-snitflader der pt. kan whitelistes til:
- registration
- registration_20210511
- registration_20230425
Pool size
Hvis den konfigurede pool størrelse (producer.pool.count) er for lille kan nedenstående error logning ses. Hvis pool size ændres skal servicen genstartes.
Message producer pool empty. Consider increasing property producer.pool.count.
Konfigurationer
Databaseadgang konfigureres i datasource filer i:
...
Batch job
Lookup applikationen indeholder følgende batchjobs:
...
Se i øvrigt Applikationslog
Backup
Der skal tages backup af minlog2 databasen og evt. konfigurationsfilerne nævnt i installationsvejledningen.
Belastning
Servicemålene herunder er for henholdsvis MinLog 2 RegistrationService og LookupService.
Service | Servicemål |
Svartider opdatering | 95 % af tilfældene ≤ 6,5 sek |
98 % af tilfældene ≤ 15,5 sek | |
Svartider forespørgsler | 95 % af tilfældene ≤ 2,5 sek |
98 % af tilfældene ≤ 5,5 sek |
Baggrund for vurdering af belastning
TBD