diff --git a/src/store/modules/Health/EventLogStore.js b/src/store/modules/Health/EventLogStore.js
new file mode 100644
index 0000000..404a963
--- /dev/null
+++ b/src/store/modules/Health/EventLogStore.js
@@ -0,0 +1,72 @@
+import api from '../../api';
+
+const severityToPriorityMap = {
+  Emergency: 'High',
+  Alert: 'High',
+  Critical: 'High',
+  Error: 'High',
+  Warning: 'Medium',
+  Notice: 'Low',
+  Debug: 'Low',
+  Informational: 'Low'
+};
+
+const EventLogStore = {
+  namespaced: true,
+  state: {
+    eventLogData: null
+  },
+  getters: {
+    eventLogData: state => state.eventLogData
+  },
+  mutations: {
+    setEventLogData: (state, eventLogData) =>
+      (state.eventLogData = eventLogData)
+  },
+  actions: {
+    getEventLogData({ commit }) {
+      api
+        .get('/xyz/openbmc_project/logging/enumerate')
+        .then(response => {
+          const eventLog = response.data.data;
+          const entryNumber = /[1-9]/;
+          const eventLogEntries = [];
+          /**
+           * Entry log endpoints:
+           * 'entry' + entry id contain event log entry information
+           * 'callout' contains part number and serial number for part affected
+           */
+          for (let key in eventLog) {
+            // Check for event log entry:
+            if (
+              key.includes('entry') &&
+              key.match(entryNumber) &&
+              !key.includes('callout')
+            ) {
+              const eventKey = eventLog[key];
+              const eventSeverity = eventKey.Severity.split('.').pop();
+              const eventPriority = severityToPriorityMap[eventSeverity];
+              eventLogEntries.push(
+                Object.assign(
+                  {
+                    logId: eventKey.Id,
+                    priority: eventPriority,
+                    timestamp: eventKey.Timestamp,
+                    eventID: eventKey.EventID,
+                    description: eventKey.Description
+                  },
+                  eventKey
+                )
+              );
+              commit('setEventLogData', eventLogEntries);
+            }
+          }
+        })
+        .catch(error => {
+          console.log('Event Log Data:', error);
+        });
+    }
+  }
+};
+
+export default EventLogStore;
