Анализ журнала аудита Caché c помощью Caché (DeepSee)

imageВ поставку СУБД Caché, кроме самого сервера базы данных, входит технология для «real-time» бизнес-аналитики DeepSee. Её использование – это наиболее быстрый способ добавить OLAP функциональность к вашему приложению на Caché.

Другим элементом установки является подсистема аудита с web-интерфейсом, возможностью расширения собственными типами событий и API для использования в прикладном коде.

Под катом – небольшой пример совместного использования этих подсистем, позволяющий ответить на вопросы — кто, что, когда делал в информационной системе?

Подсистема аудита

Предназначена для регистрации происходящих в системе событий. В системном портале управления Caché есть готовый web-интерфейс — поиск, фильтрация, экспорт, очистка и т.д. Использовать аудит в прикладном коде можно с помощью API — классы Security.Events — для регистрации типов событий, %SYS.Audit — самих событий, %SYSTEM.Security:Audit() – удобный метод для регистрации события. По умолчанию подсистема аудита неактивна, запускается через: Портал управления — Администрирование системы — Безопасность — Аудит.

Ниже пример страницы с несколькими кнопками, нажатия на которых регистрируются в базе аудита.

Пример использования аудита в прикладном коде

/// Пример использования подсистемы аудита в прикладном коде
Class habra.audit Extends %CSP.Page {

/// Регистрация прикладных ( пользовательских ) типов событий 
ClassMethod EventTypesRegister() As %Status {
#; Типы событий регистрируются через класс из системной области %SYS
set ns $namespace$namespace «%SYS»

#; set status = ##class(Security.Events).Create( Source, Type, Name, Description )
set statusC ##class(Security.Events).Create«habra»«audit»«create», «Create event example» 
set statusR ##class(Security.Events).Create«habra»«audit»«read», «Read event example» )
set statusU ##class(Security.Events).Create«habra»«audit»«update», «Update event example» )
set statusD ##class(Security.Events).Create«habra»«audit»«delete», «Delete event example» )

set $namespace ns
set status ( statusC && statusR && statusU && statusD )

Quit status
}

/// Простая страница с несколькими кнопками
ClassMethod OnPage() As %Status {

&html<<!DOCTYPE html><html><head></head><body>

<h3>Hello, #($username)#!</h3><hr>

<form method=‘post’>
<button name=‘create’>Create</button>
<button name=‘read’  >Read </button>
<button name=‘update’>Update</button>
<button name=‘delete’>Delete</button>
</form>

</body></html>>

Quit 1
}

/// Разбираем параметры формы
ClassMethod OnPreHTTP() As %Boolean ServerOnly = 1 ] {

#; форма отправит на сервер единственный параметр — имя кнопки
#; http://[server]/[app]/[class]?name=
set name $order( %request.Data(«») ) ;узнаем какая кнопка вызвала отправку

#; сохраняем в журнал аудита ( Source, Type, Name, EventData, Description )
set status ##class(%SYSTEM.Security).Audit«habra»«audit», name, «нажал кнопку»«1984» )

Quit 1
}

}

https://youtu.be/3r5o8FLlsys

Технология бизнес-аналитики DeepSee

DeepSee включает в себя разнообразные средства для построения хранилищ данных, анализа и визуализации данных, пользовательский портал, отчеты, печать, экспорт и т.д. Использует подсистемы безопасности и аудита Caché. Есть различные способы организовать интеграцию DeepSee практически с любым приложением – от терминала до web.

Одной из особенностей DeepSee является возможность аналитики на оперативных данных. Достигается за счет фоновой синхронизации куба с данными вашего приложения. Для этого в классе данных определяют параметры DSTIME и DSINTERVAL. При компиляции класса Caché генерирует дополнительный код регистрации изменений. При запуске синхронизации обновляется только незначительная часть данных куба, при этом синхронизация может выполняться непосредственно сразу после изменений в OLTP классах, что позволяет говорить о “real-time” бизнес-анализе.

Для использования фонового обновления куба в нашем примере, необходимо добавить параметры DSTIME и DSINTERVAL в системный класс %SYS.Audit и скомпилировать его.

Изменения в %SYS.Audit

image

Всё вместе

После предварительной настройки области (необходимо включить отображения глобала ^CacheAuditD) и соответствующей настройки веб-приложения для работы с DeepSee, приступаем к определению куба.

Укажем исходный класс с данными. Свойства класса станут основой для определения измерений куба. В классе %SYS.Audit свойства Username, Event, UTCTimeStamp хранят информацию для ответа на поставленные в начале статьи вопросы. На основании свойства Username определим измерение Кто, свойства Event – измерение Что, свойства UTCTimeStamp – измерение Когда. В качестве меры по умолчанию используется количество записей.

После компиляции и первоначального заполнения куба, в DeepSee Analyzer настраивают различные срезы данных (сводные таблицы). Они, в свою очередь, становятся источником данных для визуальных компонентов — виджетов. Виджеты объединяют в индикаторные панели (dashboard) и предоставляют к ним доступ для пользователей. Пользовательский портал позволяет без программирования организовать работу пользователей с индикаторными панелями.

На основании анализа журнала аудита можно легко увидеть, что один пользователь более склонен к удалению данных в системе, чем другой. На реальной системе, с большим количеством событий и пользователей, эту информацию трудно было бы выявить простым просмотром журнала аудита. Включив в куб дополнительные данные, можно получить много другой «интересной» информации о работе пользователей в системе. Главное уметь задавать правильные вопросы.
image

Полезные ссылки:
еще о DeepSee
исходники примера
отображение портала DeepSee на мобильных устройствах

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *