See Guangrong's wiki Installation of Holmes (for Testing Purpose)


Test Resource

alarm_on.json
{
        "event":        {
                "commonEventHeader":{
                        "sourceId":"example-vserver-name-val-75044",
                        "startEpochMicrosec":1413378172000000,
                        "eventId":"ab305d54-85b4-a31b-7db2-fb6b9e546015",
                        "sequence":0,
                        "domain":"fault",
                        "lastEpochMicrosec":1413378172000000,
                        "eventName":"Fault_MultiCloud_VMFailure",
                        "sourceName":"example-vserver-name-val-75044",
                        "priority":"High",
                        "version":3.0,
                        "reportingEntityName":"Multi-Cloud"
                },

                "faultFields":  {

                        "eventSeverity":"CRITICAL",

                        "alarmCondition":"Guest_Os_Failure",

                        "faultFieldsVersion":2.0,

                        "specificProblem":"Fault_MultiCloud_VMFailure",

                        "alarmInterfaceA":"aaaa",

                        "eventSourceType":"other",

                        "vfStatus":"Active"
                }
        }
}
alarm_off.json
{

        "event":        {

                "commonEventHeader":{

                        "sourceId":"example-vserver-name-val-75044",

                        "startEpochMicrosec":1413378172000000,

                        "eventId":"ab305d54-85b4-a31b-7db2-fb6b9e546015",

                        "sequence":0,

                        "domain":"fault",

                        "lastEpochMicrosec":1413378172000000,

                        "eventName":"Fault_MultiCloud_VMFailureCleared",

                        "sourceName":"example-vserver-name-val-75044",

                        "priority":"High",

                        "version":3.0,

                        "reportingEntityName":"Multi-Cloud"




                },

                "faultFields":  {

                        "eventSeverity":"CRITICAL",

                        "alarmCondition":"Guest_Os_Failure",

                        "faultFieldsVersion":2.0,

                        "specificProblem":"Fault_MultiCloud_VMFailure",

                        "alarmInterfaceA":"aaaa",

                        "eventSourceType":"other",

                        "vfStatus":"Active"




                }

        }

}
policy_onset_input.json
{

  "closedLoopEventClient": null,

  "policyVersion": null,

  "policyName": null,

  "policyScope": null,

  "target_type": "VM",

  "AAI": {

    "vserver.prov-status": "example-prov-status-val-9845",

    "vserver.resource-version": "1509546979412",

    "vserver.is-closed-loop-disabled": "false",

    "vserver.vserver-name2": "example-vserver-name2-val-55230",

    "vserver.vserver-id": "example-vserver-id-val-64888",

    "vserver.vserver-selflink": "example-vserver-selflink-val-91298",

    "vserver.in-maint": "true",

    "vserver.vserver-name": "example-vserver-name-val-75044",

    "generic-vnf.vnf-id": "example-vnf-id-val-31366",

    "generic-vnf.service-instance-id": ""

  },

  "closedLoopAlarmStart": 1413378172000000,

  "closedLoopEventStatus": "ONSET",

  "version": "1.0.2",

  "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b",

  "target": "vserver.vserver-name",

  "closedLoopAlarmEnd": 0,

  "requestID": "a0d549da-cd11-4425-af1f-fa40fdfc44ff",

  "from": "DCAE"

}
policy_abated_input.json
{

  "closedLoopEventClient": null,

  "policyVersion": null,

  "policyName": null,

  "policyScope": null,

  "target_type": "VM",

  "AAI": {

    "vserver.vserver-name2": "example-vserver-name2-val-55230",

    "vserver.vserver-id": "example-vserver-id-val-64888",

    "vserver.vserver-selflink": "example-vserver-selflink-val-91298",

    "vserver.vserver-name": "example-vserver-name-val-75044"

  },

  "closedLoopAlarmStart": 1413378172000000,

  "closedLoopEventStatus": "ABATED",

  "version": "1.0.2",

  "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b",

  "target": null,

  "closedLoopAlarmEnd": 1413378172000000,

  "requestID": "a0d549da-cd11-4425-af1f-fa40fdfc44ff",

  "from": "DCAE"

}
sampleves
{

    "event":{

        "commonEventHeader":{

            "version": 3.0,

            "eventName": "Slave MPU is offline",

            "domain": "fault",

            "eventId": "1501489595451",

            "eventType": "applicationVnf",

            "nfcNamingCode": "",

            "nfNamingCode": "",

            "sourceId": "example-vnf-id-val-31366",

            "sourceName": "example-vnf-name-val-51172",

            "reportingEntityId": "0000ZTHX1",

            "reportingEntityName": "0000ZTHX1",

            "priority": "High",

            "startEpochMicrosec": 1501518702,

            "lastEpochMicrosec": 1501518702,

            "sequence": 960

        },

        "faultFields":{

            "faultFieldsVersion": 2.0,

            "eventSeverity": "CRITICAL",

            "eventSourceType": "PgwFunction",

            "eventCategory": "equipmentAlarm",

            "alarmCondition": "The slave MPU board is offline or abnormal",

            "specificProblem": "Slave MPU is offline",

            "vfStatus": "Active",

            "alarmInterfaceA": "VNF_194.15.13.138",

            "alarmAdditionalInformation": [{

                "name":"specificProblemID",

                "value": "315"

            }, {

                "name":"objectUID",

                "value":"0000ZTHX1PGWGJI6V1"

            }, {

                "name":"locationInfo",

                "value":"MPU_22_20_0"

            }, {

                "name":"addInfo",

                "value":"Aid:17;AlarmCode:110010;AlarmReasonCode:110010;Remark:\"DeployUnit=22,Node=21,SubNode=0\";"

            }]

        }

    }

}
abatedves
{

    "event":{

        "commonEventHeader":{

            "version": 3.0,

            "eventName": "Slave MPU is offlineCleared",

            "domain": "fault",

            "eventId": "1501489595451",

            "eventType": "applicationVnf",

            "nfcNamingCode": "",

            "nfNamingCode": "",

            "sourceId": "example-vnf-id-val-31366",

            "sourceName": "example-vnf-name-val-51172",

            "reportingEntityId": "0000ZTHX1",

            "reportingEntityName": "0000ZTHX1",

            "priority": "High",

            "startEpochMicrosec": 1501518702,

            "lastEpochMicrosec": 1501518702,

            "sequence": 960

        },

        "faultFields":{

            "faultFieldsVersion": 2.0,

            "eventSeverity": "CRITICAL",

            "eventSourceType": "PgwFunction",

            "eventCategory": "equipmentAlarm",

            "alarmCondition": "The slave MPU board is offline or abnormal",

            "specificProblem": "The slave MPU board is offline or abnormal",

            "vfStatus": "Active",

            "alarmInterfaceA": "VNF_194.15.13.138",

            "alarmAdditionalInformation": [{

                "name":"specificProblemID",

                "value": "315"

            }, {

                "name":"objectUID",

                "value":"0000ZTHX1PGWGJI6V1"

            }, {

                "name":"locationInfo",

                "value":"MPU_22_20_0"

            }, {

                "name":"addInfo",

                "value":"Aid:17;AlarmCode:110010;AlarmReasonCode:110010;Remark:\"DeployUnit=22,Node=21,SubNode=0\";"

            }]

        }

    }

}
holmesrule
{

"ruleName": "VoLTE",

"loopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b",

"description": "This rule is designed for the correlation analysis for the VoLTE use case.",

"content": "package org.onap.holmes.droolsRule;\n\nimport org.onap.holmes.common.dmaap.DmaapService;\nimport org.onap.holmes.common.api.stat.VesAlarm;\nimport org.onap.holmes.common.aai.CorrelationUtil;\nimport org.onap.holmes.common.dmaap.entity.PolicyMsg;\nimport org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;\nimport org.onap.holmes.common.utils.DroolsLog;\n \n\nrule \"Relation_analysis_Rule\"\nsalience 200\nno-loop true\n    when\n        $root : VesAlarm(alarmIsCleared == 0,\n            $sourceId: sourceId, sourceId != null && !sourceId.equals(\"\"),\n\t\t\t$sourceName: sourceName, sourceName != null && !sourceName.equals(\"\"),\n\t\t\t$startEpochMicrosec: startEpochMicrosec,\n            specificProblem in (\"Fault_MultiCloud_VMFailure\"),\n            $eventId: eventId)\n        $child : VesAlarm( eventId != $eventId, parentId == null,\n            CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId, $sourceName),\n            specificProblem in (\"Slave MPU is offline\"),\n            startEpochMicrosec < $startEpochMicrosec + 60000 && startEpochMicrosec > $startEpochMicrosec - 60000 )\n    then\n\t\t$child.setParentId($root.getEventId());\n\t\tupdate($child);\n\t\t\nend\n\nrule \"root_has_child_handle_Rule\"\nsalience 150\nno-loop true\n\twhen\n\t\t$root : VesAlarm(alarmIsCleared == 0, rootFlag == 0, $eventId: eventId)\n\t\t$child : VesAlarm(eventId != $eventId, parentId == $eventId)\n\tthen\n\t\tDmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);\n\t\tPolicyMsg policyMsg = dmaapService.getPolicyMsg($root, $child, \"org.onap.holmes.droolsRule\");\n        dmaapService.publishPolicyMsg(policyMsg, \"unauthenticated.DCAE_CL_OUTPUT\");\n\t\t$root.setRootFlag(1);\n\t\tupdate($root);\nend\n\nrule \"root_no_child_handle_Rule\"\nsalience 100\nno-loop true\n    when\n        $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0,\n            sourceId != null && !sourceId.equals(\"\"),\n\t\t\tsourceName != null && !sourceName.equals(\"\"),\n            specificProblem in (\"Fault_MultiCloud_VMFailure\"))\n    then\n\t\tDmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);\n\t\tPolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, \"org.onap.holmes.droolsRule\");\n        dmaapService.publishPolicyMsg(policyMsg, \"unauthenticated.DCAE_CL_OUTPUT\");\n\t\t$root.setRootFlag(1);\n\t\tupdate($root);\nend\n\nrule \"root_cleared_handle_Rule\"\nsalience 100\nno-loop true\n    when\n        $root : VesAlarm(alarmIsCleared == 1, rootFlag == 1)\n    then\n\t\tDmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);\n\t\tPolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, \"org.onap.holmes.droolsRule\");\n        dmaapService.publishPolicyMsg(policyMsg, \"unauthenticated.DCAE_CL_OUTPUT\");\n\t\tretract($root);\nend\n\nrule \"child_handle_Rule\"\nsalience 100\nno-loop true\n    when\n        $child : VesAlarm(alarmIsCleared == 1, rootFlag == 0)\n    then\n\t\tretract($child);\nend",

"enabled": 1

}


To illustrate, the content field in the above rule is presented as readable format in the following. You need to convert it to valid json string when uploading to Holmes.

Rule content field
package org.onap.holmes.droolsRule;


import org.onap.holmes.common.dmaap.DmaapService;
import org.onap.holmes.common.api.stat.VesAlarm;
import org.onap.holmes.common.aai.CorrelationUtil;
import org.onap.holmes.common.dmaap.entity.PolicyMsg;
import org.onap.holmes.common.dropwizard.ioc.utils.ServiceLocatorHolder;
import org.onap.holmes.common.utils.DroolsLog;


rule "Relation_analysis_Rule"
salience 200
no-loop true
    when
        $root : VesAlarm(alarmIsCleared == 0,
            $sourceId: sourceId, sourceId != null && !sourceId.equals(""),
			$sourceName: sourceName, sourceName != null && !sourceName.equals(""),
			$startEpochMicrosec: startEpochMicrosec,
            specificProblem in ("Fault_MultiCloud_VMFailure"),
            $eventId: eventId)
        $child : VesAlarm( eventId != $eventId, parentId == null,
            CorrelationUtil.getInstance().isTopologicallyRelated(sourceId, $sourceId, $sourceName),
            specificProblem in ("Slave MPU is offline"),
            startEpochMicrosec < $startEpochMicrosec + 60000 && startEpochMicrosec > $startEpochMicrosec - 60000 )
    then
		$child.setParentId($root.getEventId());
		update($child);
end


rule "root_has_child_handle_Rule"
salience 150
no-loop true
	when
		$root : VesAlarm(alarmIsCleared == 0, rootFlag == 0, $eventId: eventId)
		$child : VesAlarm(eventId != $eventId, parentId == $eventId)
	then
		DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
		PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, $child, "org.onap.holmes.droolsRule");
        dmaapService.publishPolicyMsg(policyMsg, "unauthenticated.DCAE_CL_OUTPUT");
		$root.setRootFlag(1);
		update($root);
end


rule "root_no_child_handle_Rule"
salience 100
no-loop true
    when
        $root : VesAlarm(alarmIsCleared == 0, rootFlag == 0,
            sourceId != null && !sourceId.equals(""),
    		sourceName != null && !sourceName.equals(""),
            specificProblem in ("Fault_MultiCloud_VMFailure"))
    then
		DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
		PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
        dmaapService.publishPolicyMsg(policyMsg, "unauthenticated.DCAE_CL_OUTPUT");
		$root.setRootFlag(1);
		update($root);
nend


rule "root_cleared_handle_Rule"
salience 100
no-loop true
    when
        $root : VesAlarm(alarmIsCleared == 1, rootFlag == 1)
    then
		DmaapService dmaapService = ServiceLocatorHolder.getLocator().getService(DmaapService.class);
		PolicyMsg policyMsg = dmaapService.getPolicyMsg($root, null, "org.onap.holmes.droolsRule");
        dmaapService.publishPolicyMsg(policyMsg, "unauthenticated.DCAE_CL_OUTPUT");
		retract($root);
end


rule "child_handle_Rule"
salience 100
no-loop true
    when
        $child : VesAlarm(alarmIsCleared == 1, rootFlag == 0)
    then
		retract($child);
end



Before install Holmes dockers, you need to install postgres

Install Postgres
root@vm03-dcae-controller:~# docker login -u docker -p docker nexus3.onap.org:10001
Login Succeeded
root@vm03-dcae-controller:~# docker run --name postgres -p 5432:5432 -e POSTGRES_USER=holmes -e POSTGRES_PASSWORD=holmespwd -d postgres:9.5


Holmes can be deployed as standalone component by using the following steps

Holmes Manual Setup Steps
# Remove the current running instances
docker rm -f holmes-rule-management 
docker rm -f holmes-engine-management 

# Download latest images
docker login -u docker -p docker nexus3.onap.org:10001
docker pull nexus3.onap.org:10001/onap/holmes/rule-management
docker pull nexus3.onap.org:10001/onap/holmes/engine-management

# Start two Holmes docker containers
sudo docker run --name holmes-rule-management -p 9101:9101 -d -e URL_JDBC=10.0.4.1 -e MSB_ADDR=10.0.14.1 -e TESTING=1 -e HOST_IP=10.0.4.1 nexus3.onap.org:10001/onap/holmes/rule-management
sudo docker run --name holmes-engine-management -p 9102:9102 -d -e URL_JDBC=10.0.4.1 -e MSB_ADDR=10.0.14.1 -e TESTING=1 -e HOST_IP=10.0.4.1 nexus3.onap.org:10001/onap/holmes/engine-management

# Start with an older image
#sudo docker run --name holmes-engine-management -p 9102:9102 -d -e URL_JDBC=10.0.4.1 -e MSB_ADDR=10.0.14.1 -e TESTING=1 -e HOST_IP=10.0.4.1 e7d17bb9a869

# Check health
curl http://10.0.14.1/api/holmes-rule-mgmt/v1/healthcheck
curl http://10.0.14.1/api/holmes-engine-mgmt/v1/healthcheck

# Configure sub and pub topics for Holmes by using registered msb url
curl -X PUT -H 'Content-Type: application/json' -d '{"name":"unauthenticated.SEC_FAULT_OUTPUT", "url":"http://10.0.11.1:3904/events/unauthenticated.SEC_FAULT_OUTPUT"}' http://10.0.14.1/api/holmes-engine-mgmt/v1/dmaap/sub 
curl -X PUT -H 'Content-Type: application/json' -d '{"name":"unauthenticated.DCAE_CL_OUTPUT", "url":"http://10.0.11.1:3904/events/unauthenticated.DCAE_CL_OUTPUT"}'  http://10.0.14.1/api/holmes-engine-mgmt/v1/dmaap/pub

# Upload Holmes rules defined in file holmesrule
curl -X PUT -H 'Content-Type: application/json' -d @holmesrule http://10.0.14.1/api/holmes-rule-mgmt/v1/rule

# Simulate alarm_on event from MultiVIM to VES
curl -i -X POST -d @alarm_on.json --header "Content-Type: application/json" http://localhost:8081/eventListener/v5 -k


Update Holmes rules by deleting the existing rule with rule_id and upload the new rule

Update Holmes Rules
curl -X GET http://10.0.14.1/api/holmes-rule-mgmt/v1/rule |python -m json.tool
curl -X DELETE http://10.0.14.1/api/holmes-rule-mgmt/v1/rule/rule_1508902811935
curl -X PUT -H 'Content-Type: application/json' -d @holmesrule http://10.0.14.1/api/holmes-rule-mgmt/v1/rule



  • No labels