Re: [cas-user] CAS logging analysis

2019-08-27 Thread Patrick Proniewski
Hi

> When it comes to system administration and diagnostics, it is quite
> common to use standard Linux utilities for debugging. Things like grep,
> awk, sed, cut, etc.  The CAS logs make this quite difficult.  Could we
> maybe start composing the logs into single line "records" of a sort?
> 
> for example, the following is not easily processed using the cli...
> 
> =
> WHO: someone
> WHAT: ST-54765-7eEtYFJT1VBZ2Ssexczzf7FE5ow-tst-cas-01
> ACTION: SERVICE_TICKET_VALIDATED
> APPLICATION: CAS
> WHEN: Mon Aug 26 15:27:53 MDT 2019
> CLIENT IP ADDRESS: 123.123.123.123
> SERVER IP ADDRESS: server.example.com
> =


The only way I know to process multiline log files properly is to use a 
programming language like AWK, Perl, Python… You won't make it with grep & 
friends.
Here is a sample AWK program you can adapt to your needs:

--
BEGIN   {
eot = ":"; eor = "\r";
eol = "\r";
}

FNR == 1 {
if (_filename_ != "")
endfile(_filename_)
_filename_ = FILENAME
beginfile(FILENAME)
}

END  {   endfile("finished");  }

/^WHO: / { 
sub(/^WHO: /,"");
WHO = $0; next
}

/^WHAT: / { 
sub(/^WHAT: /,"");  # WHAT
WHAT = $0; next
}

/^ACTION: / { 
sub(/^ACTION: /,"");# ACTION
ACTION = $0; next
}

/^APPLICATION: / { 
sub(/^APPLICATION: /,"");   # APPLICATION
APPLICATION = $0; next
}

/^WHEN: / { 
sub(/^WHEN: /,"");  # WHEN
APPLICATION = $0; next
}

/^CLIENT IP ADDRESS: / { 
sub(/^CLIENT IP ADDRESS: /,""); # CLIENT IP ADDRESS
CLIENT_IP_ADDRESS = " "$0; next
}

/^SERVER IP ADDRESS: / { 
sub(/^SERVER IP ADDRESS: /,""); # SERVER IP ADDRESS
SERVER_IP_ADDRESS = " "$0; next
}

$0 !~/.+/ {
prfields();
WHO=""; WHAT =""; APPLICATION = ""; ACTION=""; CLIENT_IP_ADDRESS=""; 
SERVER_IP_ADDRESS="";
}

# fonctions =

function beginfile(fichier) { 
# init
WHO = ""; WHAT =""; APPLICATION = ""; ACTION=""; CLIENT_IP_ADDRESS=""; 
SERVER_IP_ADDRESS="";
}

function endfile(fichier)   {   # end of file
printf("%s",eor); nfich++;
printf(".") > "/dev/stderr";
}

function prfields() {   # output to stdout
printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", WHO, eot, WHAT, eot, 
APPLICATION, eot, APPLICATION, eot, 
ACTION,",",SERVER_IP_ADDRESS,",",APPLICATION,",",CLIENT_IP_ADDRESS":", "\n");
}

--


You save it as foo.awk on your server, and use it like this:

awk -f /path/to/foo.awk /path/to/cas.log

To change the output, just tweak function prfields and eot. It needs testing, 
it's a quick & dirty script.

If you don't have more than 500 MB of cas.log daily, I would suggest you give 
Splunk a try. Under 500 MB per day you wont need a paid licence and can live 
with a free licence. It's incredibly powerful and will allow you to parse your 
log with great efficiency: no more headaches and 100% of your time on valuable 
task ;)


Patrick PRONIEWSKI
-- 
Chef du Service Opérations - DSI - Université Lumière Lyon 2
Responsable Sécurité des Systèmes d'Information

-- 
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cas-user+unsubscr...@apereo.org.
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/BC3EDF92-8F9D-4CB7-9587-7D6EB16FCBF8%40univ-lyon2.fr.


[cas-user] CAS logging analysis

2019-08-26 Thread Trenton D. Adams

Hi Guys,

When it comes to system administration and diagnostics, it is quite
common to use standard Linux utilities for debugging. Things like grep,
awk, sed, cut, etc.  The CAS logs make this quite difficult.  Could we
maybe start composing the logs into single line "records" of a sort?

for example, the following is not easily processed using the cli...

=
WHO: someone
WHAT: ST-54765-7eEtYFJT1VBZ2Ssexczzf7FE5ow-tst-cas-01
ACTION: SERVICE_TICKET_VALIDATED
APPLICATION: CAS
WHEN: Mon Aug 26 15:27:53 MDT 2019
CLIENT IP ADDRESS: 123.123.123.123
SERVER IP ADDRESS: server.example.com
=

I've been working around it in a somewhat clunky way by doing the
following, but this really is just a hack.

tail -f /var/log/cas/cas.log | egrep 'CLIENT IP ADDRESS|ACTION|WHAT'

Also, for service ticket validations it would be nice if they included
the service url.

Thanks.

--
Trenton D. Adams
Senior Systems Analyst/Web Software Developer
Applications Unit - ITS
Athabasca University
(780) 675-6195

It is only when you are surrounded by a supportive team, that you can achieve
your best.  Instead of tearing people down, try building them up!

--
This communication is intended for the use of the recipient to whom it is 
addressed, and may contain confidential, personal, and or privileged 
information. Please contact us immediately if you are not the intended 
recipient of this communication, and do not copy, distribute, or take action 
relying on it. Any communications received in error, or subsequent reply, 
should be deleted or destroyed.
---

--
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS Community" group.

To unsubscribe from this group and stop receiving emails from it, send an email 
to cas-user+unsubscr...@apereo.org.
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/48ee54ab-c7b3-469d-f25e-3d826846edd9%40athabascau.ca.