Server 2008 e-mail na temat zmiennych zdarzeń

13

Jedną z nowych funkcji Server 2008 jest możliwość dołączenia zadania do określonego zdarzenia w dziennikach zdarzeń. Jednym z dostępnych działań jest wysłanie wiadomości e-mail za pośrednictwem serwera SMTP.

Działa to świetnie, jednak byłoby idealnie, gdyby w treści wiadomości można było umieścić zawartość zdarzenia. Próbowałem użyć $ eventdescription i% eventdescription%, ale to tylko strzały w ciemności. Żadna ilość googlingu nie daje żadnych rezultatów.

Czy ktoś wie, czy to jest możliwe?

Aktualizacja : sugestia Sparks poniżej jest krokiem we właściwym kierunku, moim zdaniem, jednak ta metoda nie działa dla wszystkich wartości. Na przykład mogę pobrać RecordID, Severity i Channel, jak pokazano, ale nie mogę użyć tej samej metody do odzyskania EventID lub, co najważniejsze, opisu.

Oto nieprzetworzony kod XML z jednego zdarzenia:

[Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"]
  [System]
    [Provider Name="DFSR" /] 
    [EventID Qualifiers="16384"]4412[/EventID] 
    [Level]4[/Level] 
    [Task]0[/Task] 
    [Keywords]0x80000000000000[/Keywords] 
    [TimeCreated SystemTime="2009-05-14T18:18:09.000Z" /] 
    [EventRecordID]45692[/EventRecordID] 
    [Channel]DFS Replication[/Channel] 
    [Computer]servername.domain.com[/Computer] 
    [Security /] 
    [/System]
  [EventData]
    [Data]9046C3F4-843E-4A53-B941-4B20764072E5[/Data] 
    [Data]D:\departments\Geomatics\Plan Quality\Data Processing\CG3533017 2009-05-13 KT FIXED[/Data] 
    [Data]D:\departments[/Data] 
    [Data]{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data] 
    [Data]Departments[/Data] 
    [Data]domain.ca\files\departments[/Data] 
    [Data]B8242CE2-F5EB-47DA-BA5B-1DD2F7EE3AB9[/Data] 
    [Data]DFAA7A54-66CB-4C31-81A0-0F861382C32C[/Data] 
    [Data]CG3533017 2009-05-13-{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data] 
  [/EventData]
 [/Event]

Próbowałem użyć ValueQuery dla EventData, ale nie zwraca danych.

Jeff Miles
źródło
+1 - używamy tego do wysyłania alertów z naszego serwera internetowego, a ja na przykład chciałbym uzyskać więcej informacji w wiadomości e-mail! Będę miał oko na ten wątek ...
Keith Williams,

Odpowiedzi:

3

Podchodziłem do tego nieco inaczej, ale to podejście generuje wiadomości e-mail o nowych zdarzeniach, które pasują do niestandardowego filtra, a wszystkie szczegóły zdarzeń są zawarte w treści wiadomości e-mail.

1) Utwórz „Widok niestandardowy” w Podglądzie zdarzeń z wybranym filtrem.

2) Po wyświetleniu widoku powinien zostać wyświetlony link „Dołącz zadanie do tego widoku niestandardowego ...”.

Wybrałem tutaj sendMail.exe ( http://caspian.dotconf.net/menu/Software/SendEmail/ ), który rozpakowałem do C: \ sendmail. Powodem jest to, że akcja Microsoft „Wyślij wiadomość e-mail” ma problemy z uwierzytelnianiem SMTP i najwyraźniej nie występuje nawet w Server 2012.

Tak więc w moim przypadku wybrałem opcję „Uruchom program”, dołączając zadanie do widoku niestandardowego. Ale zamierzamy edytować go jako XML, więc nie martw się o wypełnienie go za pomocą GUI.

3) Wyeksportuj nowe zadanie do formatu XML, będziemy je później edytować.

4) Utwórz plik „mail-event.bat” w folderze C: \ sendmail z następującymi 3 wierszami:

C:\Windows\system32\wevtutil.exe qe Application /f:text /q:"<QueryList><Query Id='0' Path='Application'><Select Path='Application'>*[System[(EventRecordID=%1)]]</Select></Query></QueryList>" > C:\sendmail\%1.log
C:\sendmail\sendEmail.exe -s <smtp_server> -f <from> -xu <user> -xp <pass> -t <to> -u "<subject>" -o message-file=c:\sendmail\%1.log
del C:\sendmail\%1.log

Oczywiście zamień „smtp_server”, „from”, „user”, „pass”, „to”, „subject” na pożądane wartości.

Spowoduje to utworzenie pliku „$ (EventRecordID) .log” w folderze C: \ sendmail ze wszystkimi szczegółami tego zdarzenia, prześlij go pocztą, a następnie usuń.

Możesz sprawdzić, czy plik wsadowy działa, wchodząc do Podglądu zdarzeń, otwierając zdarzenie w dzienniku aplikacji, przechodząc do karty Szczegóły, wybierając „Widok XML”, a następnie szukając EventRecordID. Skopiuj tę liczbę całkowitą, a następnie uruchom z wiersza poleceń:

C: \ sendmail> log-event.bat 53522

Oczywiście zastąpienie 53522 wartością z węzła EventRecordID. Jeśli otrzymasz wiadomość e-mail, przejdź do szczęśliwego miejsca.

UWAGA: Być może zauważyłeś, że ciąg „Aplikacja” pojawia się kilka razy w wierszu polecenia dla wevtutil.exe - to dlatego, że nie mogłem uruchomić go, kierując go bezpośrednio w Widok niestandardowy, a mój Widok niestandardowy okazał się podzestawem zdarzeń, które wszystkie znajdują się w dzienniku aplikacji. Być może będziesz musiał to zmienić, aby na przykład zadziałało, jeśli próbujesz wysłać zdarzenia z dziennika systemu.

5) Edytuj wyeksportowany plik XML, wprowadzimy dwie zmiany:

Najpierw dodaj następujący węzeł „ValueQueries” do pliku XML w węźle „EventTrigger”:

<EventTrigger>
  <Enabled>true</Enabled>
  <Subscription>...snip...</Subscription>
  <ValueQueries>
    <Value name="EventRecordID">Event/System/EventRecordID</Value>
  </ValueQueries>  
</EventTrigger>

UWAGA: Powyżej wyciąłem informacje o „subskrypcji”, które zostaną wypełnione na podstawie utworzonego przez Ciebie widoku niestandardowego. Nie kopiuj mojej „Subskrypcji” do swojego XML!

Po drugie, zastąp węzeł Działania następującym:

<Actions Context="Author">
   <Exec>
     <Command>C:\sendmail\mail_event.bat</Command>
     <Arguments>$(EventRecordID)</Arguments>
   </Exec>
</Actions>

Teraz spraw, aby nowe wydarzenie pojawiło się w widoku niestandardowym i powinieneś automatycznie otrzymać powiadomienie e-mailem! Łał!

JeremyS
źródło
1

Korzystając z dokumentacji w linku dostarczonym przez Sparks, dodaj ten dodatkowy wiersz do pliku XML wyeksportowanego z Harmonogramu zadań, aby uzyskać tekst zdarzenia:

<Value name="eventData">Event/EventData/Data</Value>

Również interesujące (i mam nadzieję, że oczywiste):

<Value name="eventTimeCreated">Event/System/TimeCreated/@SystemTime</Value>

Znalazłem google „Event / System / EventRecordID”

Następnie możesz odwoływać się do zmiennych $ (eventData) i $ (eventTimeCreated) w swoim zadaniu.

Wygląda na to, że wartości są określone przez przejście przez hierarchię XML. Spodziewałbym się, że będziesz w stanie określić większość dowolnych części zdarzenia poprzez dekompozycję zrzutu XML w celu utworzenia wyrażenia rozdzielanego ukośnikiem.

Wygląda na to, że „/ @” jest skrótem dla znaku spacji w tej składni.


źródło
Właśnie dodałem to do moich wydarzeń, zobaczymy, czy zadziała następnym razem, gdy wystąpi konflikt DFSR. Dzięki za odpowiedź, będę Cię informować.
Jeff Miles,
1

Czy szukasz danych o wydarzeniu?

Moim wymaganiem było wysyłanie wiadomości e-mail za każdym razem, gdy pula aplikacji IIS została zamknięta z powodu braku czasu. Chciałem, aby nazwa puli aplikacji, która została zamknięta, pojawiła się w wiadomości e-mail.

To działało dla mnie:

<Value name = "appPoolId"> Event / EventData / Data [@ Name = 'AppPoolID'] </Value>


źródło
1

Nigdy nie udało mi się tego uruchomić i wygląda na to, że dla Server 2012 ta funkcja poczty e-mail została całkowicie usunięta. Niestety ślepy zaułek.

Jeff Miles
źródło
0

Chyba skończyłem rozwijać twoje pomysły

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-02-07T17:30:20.8644895</Date>
    <Author>QA\TimT</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="ForwardedEvents"&gt;&lt;Select Path="ForwardedEvents"&gt;*&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
      <ValueQueries>
        <Value name="EventChannel">Event/System/Channel</Value>
        <Value name="EventComputer">Event/System/Computer</Value>
        <Value name="EventData">Event/EventData/Data</Value>
        <Value name="EventID">Event/System/EventID</Value>
        <Value name="EventRecordID">Event/System/EventRecordID</Value>
        <Value name="EventSeverity">Event/System/Level</Value>
        <Value name="Message">Event/RenderingInfo/Message</Value>
      </ValueQueries>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>QA\Administrator</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <SendEmail>
      <Server>mail.nowhere.com</Server>
      <Subject>$(EventComputer) reports event $(EventID) in $(EventChannel), record $(EventRecordID), severety $(EventSeverity)</Subject>
      <To>[email protected]</To>
      <From>[email protected]</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>
Tim Tsyganko
źródło
Proszę nie upuść trochę zrzutu kodu (na trzyletnie pytanie), ale wyjaśnij, co zrobiłeś.
Sven