Archiv pro štítek: acs

Cumulative Update 6 for System Center Operations Manager 2007 R2

Cumulative Update 6 for System Center Operations Manager 2007 R2 is available:

… resolves the following issues:

  • RMS promotion fails if NetworkName and PrincipalNames are not in sync for agents.
  • UI is limited to only 100 MB for the Memory Usage field in the wizard.
  • Additional OIDs in auth certificate are not processed correctly.
  • AEM creates duplicate computer objects in OpsMgr based on Agents NetBIOS name.
  • Cannot open reporting pane on OpsMgr 2007 R2 remote console.
  • Cannot view schedule for scheduled report.
  • ManagementServerConfigTool with the option „promoterms“ fails because it stops polling the SDK Service.
  • OpsMgr reports are failing on Windows 7 with the error: „Cannot initialize report.“
  • ACS events have „n/a“ as their category in the ACS database.
  • Watch agentless monitoring listener to detect failure to respond.
  • SCOM SDK memory leak on cryptography keys and cryptography contexts.
  • After you click Edit Schedule, a message box appears, and you cannot save the change value.
  • Audit events can be lost when the AdtServer process crashes.

… resolves the following cross-platform issues:

  • The installation process for the IBM AIX 6.1 agent incorrectly checks for AIX 5.3 packages.
  • After a system restart, the OpsMgr agent for Solaris may start to run before local file systems are mounted.
  • On Red Hat Linux version 4 and SUSE Linux version 9, LVM disks are not discovered and cannot be monitored.
  • The OpsMgr agent for AIX does not report the arguments for monitored processes.
  • When Microsoft security update MS12-006 is installed on an OpsMgr management server, that management server can no longer communicate with the OpsMgr agent on any Linux or UNIX server.
  • On HP-UX, OpsMgr cannot discover and monitor a logical volume that is composed of more than 127 physical volumes.

Navíc přidává podporu pro další systémy:

  • IBM AIX 7.1 (POWER).
  • Oracle Solaris 11 (x86 and SPARC).

ACS: 42 dní a dost?

Pokud zvětšíme počet dní, po které jsou uchována data v databázi ACS na více než 42 (dní), zjistíme po čase nepříjemnou skutečnost. Starší data se v reportech nezobrazují. Kontrola přímo v databázi prozradí, že je vše v pořádku, je vytvořen požadovaný počet datových oddílů (partitions), ale pohledy používané v reportech (dvHeader, dvAll5, dvAll) nejstarší data nezobrazují.
V čem je problém?
V dynamické definici výše uvedených pohledů, jak se můžeme přesvědčit, když si v nástroji SQL Server Management Studio zobrazíme definici pohledu dvAll (Script View as | CREATE To | New Query Editor Window). Ve skriptu bude uvedeno spojení maximálně 42 dílčích pohledů dvAll_<uid> jednotlivých denních oddílů.

 

create view [AdtServer].[dvAll] as
   select * from dvAll_9c3313df_5146_4b30_ae0b_5c989adfb60d union all
   select * from dvAll_e8bfe379_2ef4_4ce8_a5c1_abc61f814798 union all
   select * from dvAll_46ea83f7_caa6_41c5_af65_2b505586e87f       -- a tak dále

Dá se to napravit?
Zatím jsem nikde neobjevil oficiální vyjádření Microsoftu, takže berte následující pokyny s rezervou.

Na serveru, který má roli ACS Collector jsou dva skripty v jazyce SQL: C:\WINDOWS\system32\Security\AdtServer\DbCreatePartition.sql a C:\WINDOWS\system32\Security\AdtServer\DbDeletePartition.sql.

V nich jsou definice s pevně určeným počtem datových oddílů databáze, číslem 42. Například pro pohled dvAll je v prvním skriptu uvedeno:

 

* Create or update dvAll, the view across all partition views
*
*************************************************************************/
 declare @iIsFirst int
 declare @vchStmt nvarchar(max)
 declare @vchPartitionId nchar(36)
 declare cPartition cursor for
   select top 42 PartitionId from dtPartition order by PartitionCloseTime desc

Ve zmíněných skriptech se číslo 42 nachází shodně ve všech třech definicích pohledů dvAll, dvAll5 i dvHeader.  Pokud požadujeme reporty z dat z většího časového úseku, musíme tuto konstantu na šesti místech zvětšit. Nezapomeňte oba původní skripty nejprve uložit v původním tvaru! Jakmile omylem změníte něco jiného, nebude správně fungovat noční údržba databáze. To jen pro jistotu, že existuje cesta zpět . . .

Zmínky o tomto „problému“ najdeme v diskuzních fórech:

http://systemcentersolutions.wordpress.com/2011/01/11/audit-collection-services-reports-only-show-the-last-42-days-worth-of-data/

Poznámka:
Na serveru SQL 2005 lze použít maximálně 255 partitions – důvodem je omezení počtu použitých výrazů „union all“ v definici pohledu v této verzi SQL serveru. SQL Server 2008 toto omezení nemá.

ACS: list connected forwarders (VBScript)

Klientská část (agent) systému Operations Manager se skládá ze dvou neoddělitelných komponent, agent + acs forwarder. Druhá komponenta není ve výchozím stavu po instalaci agenta aktivována, tento krok musí zařídit správce systému.

Data jsou odesílána na server (role ACS Collector), který si zároveň řídí agenty – to například znamená, pokud nestíhá kolektor zpracovávat přijímaná data, dočasně začne pozastavovat příjem od některých agentů. Jakmile nápor pomine, agenty opět připojí a data postupně přijme a zpracuje. Agenty lze seskupit a pro jednotlivé skupiny stanovit různé priority, čímž zajistíme „přednostní“ zpracování záznamů třeba ze skupiny Domain Controllers (servery z této skupiny budou odpojeny ve výjimečných případech, jako poslední).

SCOM samotný informuje pouze o funkci (zdraví) forwarderu, nikoliv o aktivním připojení. K tomu musíme použít nástroj příkazové řádky AdtAdmin s parametrem /Stats. Výstup můžeme přesměrovat do souboru (stats.csv) a přehledně zobrazit v tabulce (MS Excel). Soubor nám vedle statistik pro jednotlivé servery také poskytuje informaci o aktivním připojení agenta (spojení forwarder – collector).

Následující skript VBS a příkazovou dávku CMD můžeme na management serveru ACS kolektoru použít jako Task nebo volat nezávisle, bez konzoly Operations Manager.
CMD

@echo off
echo.
echo WRITING ACTUAL STATUS (TXT FILE)
c:\windows\system32\security\adtserver\adtadmin -stats > Actual_Status.txt
cscript PARSER_STATS.VBS
echo.
echo CONNECTED FORWARDERS ARE:
type Connected_Forwarders.txt
echo -----------------------------------------------------
echo DISCONNECTED FORWARDERS ARE:
type disConnected_Forwarders.txt
echo -----------------------------------------------------

VBS – skript přehledně (lidsky čitelně) vypíše statistiku pro jednotlivé servery a nakonec dva seznamy podle stavu Připojen / Nepřipojen

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTxtFR = objFSO.OpenTextFile("Actual_Status.TXT", ForReading)
Set objTxtFW = objFSO.OpenTextFile("Connected_forwarders.TXT", ForWriting, True)
Set objTxtFWnot = objFSO.OpenTextFile("disConnected_forwarders.TXT", ForWriting, True)
'
' first line is Header
arrRecord = objTxtFR.Readline

i=1
Do While objTxtFR.AtEndOfStream <> True
arrRecord = split(objTxtFR.Readline, ",",-1)
wscript.echo " "
wscript.echo "Value: " & arrRecord(0)
wscript.echo "SID: " & arrRecord(1)
wscript.echo "Name: " & arrRecord(2)
wscript.echo "GrupID: " & arrRecord(3)
wscript.echo "Version: " & arrRecord(4)
wscript.echo "Connected: " & arrRecord(5)
wscript.echo "Total Transmitted Events: " & arrRecord(6)
wscript.echo "Total Size of Transmitted Events: " & arrRecord(7)
wscript.echo "Recv Packet Count: " & arrRecord(8)
wscript.echo "Recv Packet Size: " & arrRecord(9)
wscript.echo "Seconds Since Connection: " & arrRecord(10)
wscript.echo "Average Event Rate: " & arrRecord(11)
wscript.echo "Current Event Rate: " & arrRecord(12)
wscript.echo "Average time to collector(in ms): " & arrRecord(13)
wscript.echo "Connect Time: " & arrRecord(14)
wscript.echo "Last Action: " & arrRecord(15)
wscript.echo "Disconnect Time: " & arrRecord(16)
wscript.echo "---------------------------------------------------- " & i
If arrRecord(5) > 0 Then
objTxtFW.WriteLine(arrRecord(2))
Else
objTxtFWnot.WriteLine(arrRecord(2))
End If
i = i + 1
Loop

Audit Collection Service: struktura databáze

Struktura databáze OperationsManagerAC a organizace dat z pohledu databázového „laika“.

Návrh databáze využívá datové oddíly, dynamicky vytvářené a obsahující data za 24 hodin. Jeden den je tudíž základní jednotka, pokud počítáme s uchováním dat v databázi za delší období, vždy jsou to násobky celých dní. V databázi jsou vytvořené konfigurační tabulky a pro každý denní datový oddíl sada tabulek s datovými záznamy. Viz příklad z testovacího prostředí:

dtCategory seznam auditních kategorií
dtConfig konfigurace ACS, časové konstanty, počet datových oddílů
dtMachine seznam serverů, ze kterých se sbírají data
dtPartition seznam datových oddílů, informace o jejich stavu, ID
dtSource zdroje
dtType datové typy
— datové tabulky pro jeden oddíl:
dtEvent_1be83462_241e_45be_aaf4_a7a9cf603b09 v názvu je ID příslušného oddílu
dtEventData_1be83462_241e_45be_aaf4_a7a9cf603b09
dtPrincipal_1be83462_241e_45be_aaf4_a7a9cf603b09
dtString_1be83462_241e_45be_aaf4_a7a9cf603b09
— (data ostatních oddílů – partitions)

Pohledy (Views) jsou ve třech formátech, podle počtu zobrazovaných sloupců String01,  …, String22: dvHeader (pouze hlavička), dvAll5 (prvních pět sloupců), dvAll (všech 22 sloupců). Z následujícího předpisu pro kompletní pohled pouze pro jednu partition,  dvAll_5a1aa04b_b193_49b1_80ae_f3b019a404a3 je zřejmé, že doba zpracování dotazů v databázi bude nejkratší, pokud použijeme hledání v pohledech dvHeader. Je důležité si uvědomit, že pohled dvAll přes celou databázi představuje spojení všech existujících pohledů dvAll_<ID> přes všechny datové oddíly (partitions)


create view [dbo].[dvAll_5a1aa04b_b193_49b1_80ae_f3b019a404a3]
as
select
e.Id,
e.EventNo as EventId,
e.SequenceNo as SequenceNo,
'S/F' =
case e.TypeNo
when 8 then 'S'
when 16 then 'F'
else '?'
end,
c.Description as Category,
e.CreationTime as CreationTime,
e.CollectionTime as CollectionTime,
m.Description as AgentMachine,
sm.Description as EventMachine,
s.SourceName as Source,
p1.strSid as HeaderSid,
p1.strUser as HeaderUser,
p1.strDomain as HeaderDomain,
p2.strSid as PrimarySid,
p2.strUser as PrimaryUser,
p2.strDomain as PrimaryDomain,
e.PrimaryUserLogonId as PrimaryLogonId,
p3.strSid as ClientSid,
p3.strUser as ClientUser,
p3.strDomain as ClientDomain,
e.ClientUserLogonId as ClientLogonId,
p4.strSid as TargetSid,
p4.strUser as TargetUser,
p4.strDomain as TargetDomain,
s01.Description as String01,
s02.Description as String02,
s03.Description as String03,
s04.Description as String04,
s05.Description as String05,
s06.Description as String06,
s07.Description as String07,
s08.Description as String08,
s09.Description as String09,
s10.Description as String10,
s11.Description as String11,
s12.Description as String12,
s13.Description as String13,
s14.Description as String14,
s15.Description as String15,
s16.Description as String16,
s17.Description as String17,
s18.Description as String18,
s19.Description as String19,
s20.Description as String20,
s21.Description as String21,
s22.Description as String22
from
dtEvent_5a1aa04b_b193_49b1_80ae_f3b019a404a3 e
left outer join dtCategory c on e.CategoryNo = c.Id
left outer join dtMachine m on e.AgentMachineId = m.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 sm on e.EventMachineId = sm.Id
left outer join dtSource s on e.SourceId = s.Id
left outer join dtPrincipal_5a1aa04b_b193_49b1_80ae_f3b019a404a3 p1 on e.UserId = p1.Id
left outer join dtPrincipal_5a1aa04b_b193_49b1_80ae_f3b019a404a3 p2 on e.PrimaryUserId = p2.Id
left outer join dtPrincipal_5a1aa04b_b193_49b1_80ae_f3b019a404a3 p3 on e.ClientUserId = p3.Id
left outer join dtPrincipal_5a1aa04b_b193_49b1_80ae_f3b019a404a3 p4 on e.TargetUserId = p4.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s01 on e.StringId01 = s01.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s02 on e.StringId02 = s02.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s03 on e.StringId03 = s03.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s04 on e.StringId04 = s04.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s05 on e.StringId05 = s05.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s06 on e.StringId06 = s06.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s07 on e.StringId07 = s07.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s08 on e.StringId08 = s08.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s09 on e.StringId09 = s09.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s10 on e.StringId10 = s10.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s11 on e.StringId11 = s11.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s12 on e.StringId12 = s12.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s13 on e.StringId13 = s13.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s14 on e.StringId14 = s14.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s15 on e.StringId15 = s15.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s16 on e.StringId16 = s16.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s17 on e.StringId17 = s17.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s18 on e.StringId18 = s18.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s19 on e.StringId19 = s19.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s20 on e.StringId20 = s20.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s21 on e.StringId21 = s21.Id
left outer join dtString_5a1aa04b_b193_49b1_80ae_f3b019a404a3 s22 on e.StringId22 = s22.Id

 

ACS Forwarder Unable to Connect to Collector – MP bug

Včera jsem objevil zřejmě stále neopravenou chybu v monitorování agenta ACS. Problém je v tom, že interní monitor v MP Microsoft Audit Collection Services (Microsoft.Systemcenter.ACS.Internal ve verzi 6.1.7221.0)  jménem ACS Forwarder Unable to Connect to Collector je definován tak, že události 4369 a 4368 očekává v logu Application a ony vznikají v logu Operations Manager.

Výsledkem je, že tyto stavy na straně agenta vůbec nemonitoruje!
Náprava je jednoduchá, vytvoříme si vlastní monitor, tentokrát správně konfigurovaný a původní monitor můžeme pomocí override úplně zakázat, protože je k ničemu.

Použijeme například následující (mírně modifikovaný původní) předpis:

  1. Create a unit monitor – vybereme typ: Windows Events \ Simple Event Detection\ Windows Event Reset
  2. Destination Management Pack – použijeme vlastní MP, buď už existující nebo nový (pojmenujeme třeba Forwarder) rozhodně NEPOUŽIJEME Default management pack!
  3. Monitor pojmenujeme např. Audit Collection Forwarder – connection, jako cíl uvedeme v Monitor target: Microsoft Audit Collection Services Forwarder a rodičovský monitor musí být Availability.
  4. V dalším kroku uvedeme správné jméno logu, ve kterém monitor vyhledává události, Event Log (Unhealthy Event) Log name: Operations Manager.
  5. Event Expression (Unhealthy Event):  AND group (Event ID equals 4369, Event Source equals adtagent)
  6. Stejně bude i pro Event Log (Healthy Event) Log name: Operations Manager.
  7. Event Expression (Healthy Event):  AND group (Event ID equals 4368, Event Source equals adtagent)
  8. Configure Health: Mapování monitoru na stavy – první událost vyvolá přepnutí do stavu Warning nebo Critical, vyberte co vám více vyhovuje.
  9. Configure Alerts: podle potřeby zvolíme i generování alertu. Máme možnost volit jeho automatické uzavření, pokud monitor přejde do zdravého stavu. Kupodivu zde nelze použít Custom fields.

Struktura EventSchema.xml

Soubor EventSchema.xml definuje transformační pravidla pro sběr událostí z bezpečnostního logu Windows v systému SCOM 2007 – Audit Collection Services. Ze struktury je patrné rozdělení podle verzí  Windows (MinBuild) a Source Name. Windows 2000 – 2003 R2 používají „klasický“ formát zápisu událostí, Source Name = Security. Windows od verze Vista / 2008 mají nový formát zápisu a Source Name = Microsoft-Windows-Security-Auditing.

Verze Windows podle MinBuild pro Source Name = Security odpovídají:

2195 - Windows 2000
2600 - Windows XP
3790 - Windows 2003
3791 - Windows 2003 R2

Verze Windows podle MinBuild pro Source Name = Microsoft-Windows-Security-Auditing odpovídají:

5384 - Windows Vista / 2008
7000 - Windows 7 / 2008 R2

Sekce Source Name = CrossPlatformSecurity obsahuje události sbírané ze systémů Unix a Linux.

Způsob použití a popis transformačních funkcí uvedl Eric Fitzgerald před časem: ACS Event Transformation Demystified

Databáze ACS má dvě partitions pro jeden den?

V souvislosti s přechodem z letního času na standardní čas se jednou ročně stane zvláštní věc. V jednom dni se čas ve tři hodiny opět vrátí o hodinu zpět na 2:00.  Podle standardního nastavení konfigurace ACS kolektoru je v ten okamžik spuštěna procedura pro vytvoření nové partition v databázi a aktuální partition o časovém rozsahu jedné hodiny je uzavřena.

Pokud nám to vadí, lze tomu jednoduše odpomoci změnou času spuštění procedury (2:00) o pouhou jednu sekundu, je jedno jakým směrem:

Změnu provedeme v tabulce dtConfig table, v záznamu „table switch offset in seconds since midnight UTC“ (což odpovídá ID 4) a zde přičteme nebo odečteme  „1“ od zde uvedeného čísla. V mém případě zde volím „+1“

Originální článek:

Why do I have 2 ACS Partitions today and only today? | SVT Blog.