Unter den Self-Ser­vice Busin­ness Intel­li­gence Sys­te­men ist MicroStra­tegy seit Jah­ren ein Big Player und wird trotz kon­so­li­die­ren­der Markt­vor­herr­schaft sei­tens Micro­softs immer noch von vie­len Unter­neh­men ver­wen­det und teil­weise auch neu ein­ge­führt. Eine gute Inte­gra­tion in Micro­soft Office, Mobile Apps und Platt­form­un­ab­hän­gig­keit sind einige der Gründe, warum viele Kun­den die Platt­form schät­zen. Wäh­rend die Soft­ware durch die Aus­füh­rung im Brow­ser grund­sätz­lich auf jedem Betriebs­sys­tem genutzt wer­den kann, erge­ben sich bei der Admi­nis­tra­tion erheb­li­che Unter­schiede je nach­dem wel­ches Betriebs­sys­tem auf den MicroStra­tegy Ser­vern läuft.

Aus­gangs­lage

Die BI-Platt­form lässt sich sowohl auf Win­dows als auch auf Linux ein­rich­ten, aller­dings wird schnell klar, dass MicroStra­tegy von Haus aus ein Win­dows Sys­tem ist. Auf Win­dows Sys­te­men ste­hen für die ver­schie­de­nen Admi­nis­tra­ti­ons­auf­ga­ben diverse GUI-basierte Tools zur Ver­fü­gung, teils ist sogar ein Trend der Auf­ga­ben­bün­de­lung in der rela­tiv neuen MicroStra­tegy Work­sta­tion zu beob­ach­ten. All diese Tools ste­hen auf Linux nicht, oder nur sehr ein­ge­schränkt als X11 GUIs zur Ver­fü­gung. Viele der Funk­tio­nen las­sen sich nur durch Auf­ruf von Shell Skrip­ten benut­zen, was viele Nach­teile bezüg­lich Zen­tra­li­tät, Log­ging und Über­wa­chung bedeu­tet. Um eine bes­sere, effi­zi­en­tere Admi­nis­tra­tion unter Linux zu ermög­li­chen, wurde ein Steu­er­frame­work in Python ent­wi­ckelt, wel­ches hier nun vor­ge­stellt wer­den soll.

Auf der ande­ren Seite ist Linux auf­grund sei­ner hohen Sta­bi­li­tät und ein­fach War­tung ins­be­son­dere in gro­ßen Sys­te­men auf Unter­neh­mens­ebene nach wie vor sehr beliebt. Der Kunde kann dabei sowohl auf kos­ten­lose Dis­tri­bu­tio­nen wie Open­SUSE oder Fedora zugrei­fen oder deren pro­prie­tä­ren Vari­an­ten SUSE Linux Enter­prise Ser­ver und Red Hat Enter­prise Linux mit Enter­prise-Level- und Long-Term-Sup­port nut­zen. Letz­te­res ist im All­ge­mei­nen die Regel. Daher ergibt sich das fun­da­men­tale Pro­blem ein haupt­säch­lich für Win­dows gewar­te­tes Pro­dukt auf Linux Sys­te­men effi­zi­ent zu betrei­ben. Bevor auf die dabei auf­kom­men­den zen­tra­len Pro­bleme näher ein­ge­gan­gen wird, soll zunächst ein gro­ber Über­blick über den Auf­bau einer MicroStra­tegy Umge­bung gege­ben wer­den, um die Pro­zesse bes­ser ver­ste­hen zu können.

Über­sicht MicroStra­tegy Umgebung

Ein klas­si­sches Setup für MicroStra­tegy im 3‑Tier Betrieb stellt sich wie folgt dar: Im Zen­trum aller Ope­ra­tio­nen steht der Intel­li­gence Ser­ver, er ver­ar­bei­tet die über das Front­end abge­setz­ten Anfra­gen in SQL-Queries für das ange­schlos­sene Data­ware­house (DWH) und lie­fert die Ergeb­nisse zurück. Die gesamte Model­lie­rung der Daten, d.h. die Ver­knüp­fung der Daten­bank­ta­bel­len mit Attri­bu­ten, Metri­ken, usw. fin­det hier statt. Nut­zer­ver­wal­tung, ACL, Migra­ti­ons­pa­kete und Nut­zer­sta­tis­ti­ken lie­gen neben vie­len wei­te­ren Auf­ga­ben ebenso im Leis­tungs­spek­trum des Intel­li­gence Ser­vers. Die gesam­ten Daten hierzu spei­chern MicroStra­tegy in ver­schie­de­nen Meta Daten­ban­ken (i.d.R. sepe­ra­ter Ser­ver) in Form einer rela­tio­na­len Daten­bank (z.B. Post­gres). Der Nut­zer kom­mu­ni­ziert nicht direkt mit dem Intel­li­gence Ser­ver, son­dern über den MicroStra­tegy Web Ser­ver. Die­ser stellt mit­tels Apa­che Tom­cat für die Cli­ent Rech­ner eine Web­ober­flä­che als Front­end bereit, auf wel­cher die Nut­zer ihre BI Ana­ly­sen machen. Die drei Ebe­nen der 3‑Tier Umge­bung setz­ten sich also zusam­men aus Daten­ban­ken (Meta +DWH), Intel­li­gence Ser­ver, Web Ser­ver. Für den ord­nungs­ge­mä­ßen Betrieb müs­sen, je nach­dem wel­che Ser­vices gefor­dert sind, ver­schie­dene Dienste ins­be­son­dere auf dem Intel­li­gence Ser­ver und Web Ser­ver lau­fen und über­wacht wer­den. Das Setup für das diese Python Lösung ent­wi­ckelt wurde hat hier bei­spiels­weise neun, bzw. fünf Dienste Auf dem Intel­li­gence und Web­ser­ver. Wäh­rend diese Archi­tek­tur auf Win­dows und Linux Sys­te­men iden­tisch ist, kom­men wir nun zu den Linux-spe­zi­fi­schen Beson­der­hei­ten und Problemen.

Pro­blem­stel­lung

In Linux Ser­ver­um­ge­bun­gen steht in der Regel nur die Kom­man­do­zeile per SSH zur Ver­fü­gung, oft über meh­rere Tun­nel was die Per­for­mance von X11 Pro­to­kol­len erheb­lich ein­schränkt. Wie ein­gangs erwähnt, stellt MicroStra­tegy Shell Skripte zur Ver­fü­gung, um diese Dienste zu star­ten und zu stop­pen. Diese müs­sen alle ein­zeln in der rich­ti­gen Rei­hen­folge aus­ge­führt wer­den, um das Sys­tem ins­be­son­dere im Rah­men von War­tungs­ar­bei­ten hoch und run­ter­zu­fah­ren. Um den Sta­tus die­ser Dienste abzu­fra­gen, gibt es ent­we­der manu­ell aus­zu­füh­rende Shell Skripte oder man muss sogar müh­sam mit­tels Pro­zess­liste her­aus­fin­den, ob die Anwen­dung läuft. Dabei ist anzu­mer­ken, dass die Skripte kei­ner ein­heit­li­chen Aus­gabe fol­gen und teil­weise auch nur unzu­rei­chend mit­tels Pro­zess­liste über­prü­fen. Ein Bei­spiel in die­sem Zusam­men­hang ist Tom­cat, wo ein lau­fen­der Pro­zess noch nicht garan­tiert, dass der Web­ser­ver ord­nungs­ge­mäß funk­tio­niert. Ebenso gibt es keine zen­trale Log­da­tei die all­um­fas­sen­den Infor­ma­tio­nen dazu zur Ver­fü­gung stellt, bzw. die Log­da­tei ist so gra­nu­lar auf­ge­baut, dass eine schnelle Über­prü­fung unmög­lich ist. Hinzu kom­men sich stän­dig wan­delnde Anfor­de­run­gen, weil MicroStra­tegy im Rah­men von Updates Dienste anders struk­tu­riert, ent­fernt neue hin­zu­fügt. Bei­spiele sind die Ein­füh­rung von Plat­forms Ana­ly­tics und Apa­che Kafka als Stream­hand­ler für Echt­zeit­da­ten. Zusätz­lich muss auch bedacht wer­den, dass in der Regel nicht eine, son­dern min­des­tens drei sol­cher 3‑Tier Umge­bun­gen par­al­lel lau­fen (Ent­wick­lung, Test, Pro­duk­tion). Die oben genann­ten Pro­bleme mün­den also in fol­gende Anfor­de­run­gen an eine Steuersoftware:

  • SSH freund­lich, ressourcenschonend
  • Zen­tra­les Logging
  • Erwei­ter­bar­keit und Anpassungsfähigkeit
  • Ser­ver­über­wa­chung, sichere Überprüfungen

Umset­zung mit Python

Auf­bau
Abbil­dung 1 Klas­sen­auf­bau des Pythonframeworks

Um die oben genann­ten Anfor­de­run­gen zu erfül­len, wurde ein viel­schich­ti­ges, mit­tels Objekt­ori­en­tie­rung abs­tra­hier­tes Frame­work in Python geschaf­fen. In Abb. 1 ist der Auf­bau auf Klas­se­n­e­bene skiz­ziert. Die für die indi­vi­du­el­len Ser­vices sehr unter­schied­li­chen Steu­er­rou­ti­nen sind auf unters­ter Ebene (Ser­vices) posi­tio­niert, kom­mu­ni­zie­ren aber über ein stan­dar­di­sier­tes Pro­to­koll mit den dar­über lie­gen­den Ebe­nen. Dadurch kön­nen Ver­än­de­run­gen in den Anfor­de­run­gen schnell und ein­fach umge­setzt wer­den. Um meh­rere Auf­ga­ben in Job­lis­ten zu bün­deln, wurde eine stan­dar­di­sierte Dis­patcher Klasse imple­men­tiert. Um das Frame­work schnell und ein­fach in ver­schie­de­nen Umge­bun­gen zur Ver­fü­gung zu stel­len sind alle Kon­fi­gu­ra­tio­nen in JSON Dateien gespeichert. 

Abbil­dung 2 Bild­schirm­aus­gabe zur Sta­tus­ab­frage auf dem I‑Server
Ver­sio­nie­rung

Zur Ver­sio­nie­rung und für das Roll­out auf den ein­zel­nen Ser­vern kommt Git­lab zum Ein­satz, ein ein­fa­ches „Stan­dard“ Git oder ähn­li­ches Sys­tem würde sich aber genauso eig­nen. Selbst­ver­ständ­lich sind Kon­fi­gu­ra­tion und Source Code in unter­schied­li­chen Repo­si­to­rien unter­ge­bracht. Beim Roll-Out kommt außer­dem eine Setup Rou­tine zum Ein­satz, sodass sich das Frame­work inner­halb weni­ger Minu­ten bereit­stel­len lässt. Die Bild­schirm­aus­gabe erfolgt über das Con­trol-Modul. Als Bei­spiel ist in Abb. 2 die Sta­tus­aus­gabe eines Intel­li­gence Ser­vers abge­bil­det. Um übli­chen Stan­dards gerecht zu wer­den und mög­lichst wenig 3rd-Party Soft­ware zu ver­wen­den wurde wenn mög­lich nur mit den Klas­sen der Stan­dard Python Library gear­bei­tet. Dies garan­tiert nied­rige Anfor­de­run­gen an das Ziel­sys­tem und ein­fa­che Ein­bet­tung von Code in bestehende Pro­jekte und Umge­bun­gen. Sämt­li­che Vor­gänge wer­den zen­tral geloggt und das Log­ging lässt sich in Bezug auf Gra­nu­la­ri­tät und Erschei­nungs­bild indi­vi­du­ell mit­tels JSON kon­fi­gu­rie­ren.
Um die ord­nungs­ge­mäße Funk­tion der Dienste zu über­wa­chen wer­den die Sta­tus­kon­trol­len regel­mä­ßig durch­ge­führt und even­tu­elle Ver­än­de­run­gen sofort per Mail an den Admi­nis­tra­tor wei­ter­ge­lei­tet. Mit­tels SMS Dienst kön­nen diese auch wahl­weise über das Mobil­funk­netz zur Ver­fü­gung gestellt wer­den. So kann der Sys­tem­ad­mi­nis­tra­tor schnell reagie­ren, wenn es zu unvor­her­ge­se­hen Pro­ble­men kom­men sollte. Als wei­tere Neue­rung gegen­über den Her­stel­ler Tools ist noch die auto­ma­ti­sche Erstel­lung von Back­ups der diver­sen Meta Daten­ban­ken in MicroStra­tegy zu erwähnen.

Aus­blick und Weiterentwicklung

Auf­grund von Fall­spe­zi­fi­schen Anfor­de­run­gen arbei­te­tet das Frame­work zur­zeit weit­ge­hend getrennt auf Web- und Intel­li­gence Ser­ver, eine zen­trale Steue­rung wäre aber mit­tels SSH auch ohne Pro­bleme rea­li­sier­bar. Des wei­te­ren wird gerade an der Ein­bet­tung des neuen von MicroStra­tegy bereit­ge­stell­ten Python Paket mstrio-py gear­bei­tet. Neben dem Import und Export von Daten für Data­sci­ence Anwen­dun­gen erlaubt es auch admi­nis­tra­tive Mani­pu­la­tio­nen wie Nut­zer­ver­wal­tung und die Über­nahme der Com­mand Mana­ger Funk­tio­na­li­tät. Die auto­ma­ti­sche Deak­ti­vie­rung von Nut­zern anhand bestimm­ter Kri­te­rien ist bei­spiel­weise ein neues Fea­ture die­ser Imple­men­tie­rung. Zusam­men mit der bis­he­ri­gen Funk­tio­na­li­tät des eher im low-level Bereich ange­sie­del­ten Frame­works wird das Pro­jekt so immer wei­ter zu einer all­um­fas­sen­den, auto­ma­ti­sier­ten Admi­nis­tra­ti­ons­lö­sung für MicroStra­tegy entwickelt.

Fazit

Kun­den wer­den wei­ter­hin Linux und MicroStra­tegy zusam­men nut­zen. Mit von Ver­sion zu Ver­sion wach­sen­der Kom­ple­xi­tät des MicroStra­tegy Sys­tems wer­den die Anfor­de­run­gen und der Auf­wand den Sys­tem­ad­mi­nis­tra­tor immer grö­ßer, die Par­al­le­li­tät meh­re­rer Umge­bun­gen ver­schärft das Pro­blem. Hier bie­tet das Steu­er­frame­work in Python eine ele­gante Mög­lich­keit, stan­dar­di­sierte Pro­zesse mit wenig Auf­wand durch­zu­füh­ren, seine Sys­teme immer im Blick zu haben und dem Kun­den auf diese Weise einen sowohl leis­tungs- als auch kos­ten­ori­en­tier­ten Ser­vice zur Ver­fü­gung zu stellen.