On 8/11/2014 5:58 AM, [email protected] wrote:
> I can get the full parameter set in XML format. Unfortunately I've
> found no usefull hint in the nxlog documentation how to extract
> data fields like
>
> - TargetFilename
> - Image
> - CommandLine
> - ParentCommandLine
>
> $raw_event and $Message do not contain this data.
We handle this by transmitting in Binary and storing in JSON format, though XML
would work
as well. The output file is monitored by SEC, which uses a PerlFunc to flatten
the JSON
structure into a hash:
type=Single
ptype=PerlFunc
pattern=sub { \
chomp($_[0]); my($ptr) = JSON::decode_json($_[0]); \
%WINDOWS = (); flatten($ptr, \%WINDOWS, ""); \
$WINDOWS{SourceName} =~ s/^Microsoft-Windows-//; \
return \%WINDOWS; }
varmap=WINDOWS
desc=Parse JSON Windows Event
continue=TakeNext
action=none
The referenced flatten routine was pulled from an example posted on the SEC
mailing list
by the SEC author, included below.
use JSON;
sub flatten {
my $ref = $_[0];
my $ret = $_[1];
my $prefix = $_[2];
if (ref($ref) eq "HASH") {
for my $key (keys %{$ref}) {
if (ref($ref->{$key}) eq "") {
$ret->{$prefix . $key} = $ref->{$key};
}
elsif (ref($ref->{$key}) eq "HASH") {
flatten($ref->{$key}, $ret, $prefix . $key . "!");
}
elsif (ref($ref->{$key}) eq "ARRAY") {
flatten($ref->{$key}, $ret, $prefix . $key . "!");
}
else {
$ret->{$prefix . $key} = ${$ref->{$key}};
}
}
}
elsif (ref($ref) eq "ARRAY") {
for (my $i = 0; $i < scalar(@{$ref}); ++$i) {
if (ref($ref->[$i]) eq "") {
$ret->{$prefix . $i} = $ref->[$i];
}
elsif (ref($ref->[$i]) eq "HASH") {
flatten($ref->[$i], $ret, $prefix . $i . "!");
}
elsif (ref($ref->[$i]) eq "ARRAY") {
flatten($ref->[$i], $ret, $prefix . $i . "!");
}
else {
$ret->{$prefix . $i} = ${$ref->[$i]};
}
}
}
}
After this machinery is in place, the various rulesets that follow the initial
rule can
reference the %WINDOWS hash in their own PerlFunc rules. For example:
type=Suppress
ptype=PerlFunc
pattern=sub { $WINDOWS{SourceName} =~ /^(?:DCOM|WinMgmt)$/i and
$WINDOWS{EventType} =~
/^(?:WARNING|ERROR)$/i };
I realize this is just a limited set of examples, but it provides a taste of
what is
possible. I would never want to go back to parsing text formatted events.
Regards,
Mark
------------------------------------------------------------------------------
_______________________________________________
nxlog-ce-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nxlog-ce-users