Arduino Syslog Client Library: Unterschied zwischen den Versionen
Dl8rds (Diskussion | Beiträge) |
Dl8rds (Diskussion | Beiträge) |
||
| Zeile 1: | Zeile 1: | ||
| + | = Project Definition = | ||
| + | |||
We intend to upgrade our ATV relay DB0MHB in a way that it logs every event right on the second over the network to a syslog server. Since we are going to do this with an Arduino system, I understood that there is no such thing as a Syslog client library for Arduino. | We intend to upgrade our ATV relay DB0MHB in a way that it logs every event right on the second over the network to a syslog server. Since we are going to do this with an Arduino system, I understood that there is no such thing as a Syslog client library for Arduino. | ||
| Zeile 6: | Zeile 8: | ||
* http://code.google.com/p/ardusyslog/ | * http://code.google.com/p/ardusyslog/ | ||
| + | |||
| + | = Advance Tests = | ||
| + | |||
| + | == Understand the format of a Syslog message == | ||
| + | The format of a syslog message is defined in RFC5424. It is depicted as a transformational grammar: | ||
| + | |||
| + | SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG] | ||
| + | |||
| + | HEADER = PRI VERSION SP TIMESTAMP SP HOSTNAME | ||
| + | SP APP-NAME SP PROCID SP MSGID | ||
| + | PRI = "<" PRIVAL ">" | ||
| + | PRIVAL = 1*3DIGIT ; range 0 .. 191 | ||
| + | VERSION = NONZERO-DIGIT 0*2DIGIT | ||
| + | HOSTNAME = NILVALUE / 1*255PRINTUSASCII | ||
| + | |||
| + | APP-NAME = NILVALUE / 1*48PRINTUSASCII | ||
| + | PROCID = NILVALUE / 1*128PRINTUSASCII | ||
| + | MSGID = NILVALUE / 1*32PRINTUSASCII | ||
| + | |||
| + | TIMESTAMP = NILVALUE / FULL-DATE "T" FULL-TIME | ||
| + | FULL-DATE = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAY | ||
| + | DATE-FULLYEAR = 4DIGIT | ||
| + | DATE-MONTH = 2DIGIT ; 01-12 | ||
| + | DATE-MDAY = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on | ||
| + | ; month/year | ||
| + | FULL-TIME = PARTIAL-TIME TIME-OFFSET | ||
| + | PARTIAL-TIME = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND | ||
| + | [TIME-SECFRAC] | ||
| + | TIME-HOUR = 2DIGIT ; 00-23 | ||
| + | TIME-MINUTE = 2DIGIT ; 00-59 | ||
| + | TIME-SECOND = 2DIGIT ; 00-59 | ||
| + | TIME-SECFRAC = "." 1*6DIGIT | ||
| + | TIME-OFFSET = "Z" / TIME-NUMOFFSET | ||
| + | TIME-NUMOFFSET = ("+" / "-") TIME-HOUR ":" TIME-MINUTE | ||
| + | STRUCTURED-DATA = NILVALUE / 1*SD-ELEMENT | ||
| + | SD-ELEMENT = "[" SD-ID *(SP SD-PARAM) "]" | ||
| + | SD-PARAM = PARAM-NAME "=" %d34 PARAM-VALUE %d34 | ||
| + | SD-ID = SD-NAME | ||
| + | PARAM-NAME = SD-NAME | ||
| + | PARAM-VALUE = UTF-8-STRING ; characters '"', '\' and | ||
| + | ; ']' MUST be escaped. | ||
| + | SD-NAME = 1*32PRINTUSASCII | ||
| + | ; except '=', SP, ']', %d34 (") | ||
| + | MSG = MSG-ANY / MSG-UTF8 | ||
| + | MSG-ANY = *OCTET ; not starting with BOM | ||
| + | MSG-UTF8 = BOM UTF-8-STRING | ||
| + | BOM = %xEF.BB.BF | ||
| + | UTF-8-STRING = *OCTET ; UTF-8 string as specified | ||
| + | ; in RFC 3629 | ||
| + | OCTET = %d00-255 | ||
| + | SP = %d32 | ||
| + | PRINTUSASCII = %d33-126 | ||
| + | NONZERO-DIGIT = %d49-57 | ||
| + | DIGIT = %d48 / NONZERO-DIGIT | ||
| + | NILVALUE = "-" | ||
| + | |||
| + | This grammar defines nonstructured as well as structured presentations. So very basically, the Syslog message consists of the following basic form: | ||
| + | |||
| + | <PRI> TIMESTAMP TAG MESSAGE | ||
| + | |||
| + | The PRI value is an integer number which calculates by the following metric: | ||
| + | |||
| + | 8 x (facility code) + (severity code) | ||
| + | |||
| + | where the individual codes are those: | ||
| + | |||
| + | Facilities: | ||
| + | 0 kernel messages | ||
| + | 1 user-level messages | ||
| + | 2 mail system | ||
| + | 3 system daemons | ||
| + | 4 security/authorization messages | ||
| + | 5 messages generated internally by syslogd | ||
| + | 6 line printer subsystem | ||
| + | 7 network news subsystem | ||
| + | 8 UUCP subsystem | ||
| + | 9 clock daemon | ||
| + | 10 security/authorization messages | ||
| + | 11 FTP daemon | ||
| + | 12 NTP subsystem | ||
| + | 13 log audit | ||
| + | 14 log alert | ||
| + | 15 clock daemon (note 2) | ||
| + | 16 local use 0 (local0) | ||
| + | 17 local use 1 (local1) | ||
| + | 18 local use 2 (local2) | ||
| + | 19 local use 3 (local3) | ||
| + | 20 local use 4 (local4) | ||
| + | 21 local use 5 (local5) | ||
| + | 22 local use 6 (local6) | ||
| + | 23 local use 7 (local7) | ||
| + | |||
| + | Severities: | ||
| + | 0 Emergency: system is unusable | ||
| + | 1 Alert: action must be taken immediately | ||
| + | 2 Critical: critical conditions | ||
| + | 3 Error: error conditions | ||
| + | 4 Warning: warning conditions | ||
| + | 5 Notice: normal but significant condition | ||
| + | 6 Informational: informational messages | ||
| + | 7 Debug: debug-level messages | ||
| + | |||
| + | The TIMESTAMP may be the NILVALUE if there is no time available. | ||
| + | |||
| + | == Enable my local Syslog daemon to receive log messages over the network == | ||
| + | |||
| + | Running a NATTY Ubuntu, I noticed that modern Ubuntu distros use Rainer Gerhards' '''rsyslog''' implementation. | ||
| + | |||
| + | It has a section in the config file /etc/rsyslog.conf which just needs to be uncommented: | ||
| + | |||
| + | # provides UDP syslog reception | ||
| + | $ModLoad imudp | ||
| + | $UDPServerRun 514 | ||
| + | |||
| + | Upon restarting the rsyslog service with the command '''service rsyslog restart''' you can check with '''netstat -tulpen''' if the service is listening on UDP port 514. | ||
| + | |||
| + | == Trace the logger command == | ||
Version vom 23. Juni 2011, 20:01 Uhr
Inhaltsverzeichnis
1 Project Definition
We intend to upgrade our ATV relay DB0MHB in a way that it logs every event right on the second over the network to a syslog server. Since we are going to do this with an Arduino system, I understood that there is no such thing as a Syslog client library for Arduino.
If something does not exist, you need to change that.
Please visit my Google Code site:
2 Advance Tests
2.1 Understand the format of a Syslog message
The format of a syslog message is defined in RFC5424. It is depicted as a transformational grammar:
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]
HEADER = PRI VERSION SP TIMESTAMP SP HOSTNAME
SP APP-NAME SP PROCID SP MSGID
PRI = "<" PRIVAL ">"
PRIVAL = 1*3DIGIT ; range 0 .. 191
VERSION = NONZERO-DIGIT 0*2DIGIT
HOSTNAME = NILVALUE / 1*255PRINTUSASCII
APP-NAME = NILVALUE / 1*48PRINTUSASCII
PROCID = NILVALUE / 1*128PRINTUSASCII
MSGID = NILVALUE / 1*32PRINTUSASCII
TIMESTAMP = NILVALUE / FULL-DATE "T" FULL-TIME
FULL-DATE = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAY
DATE-FULLYEAR = 4DIGIT
DATE-MONTH = 2DIGIT ; 01-12
DATE-MDAY = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on
; month/year
FULL-TIME = PARTIAL-TIME TIME-OFFSET
PARTIAL-TIME = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND
[TIME-SECFRAC]
TIME-HOUR = 2DIGIT ; 00-23
TIME-MINUTE = 2DIGIT ; 00-59
TIME-SECOND = 2DIGIT ; 00-59
TIME-SECFRAC = "." 1*6DIGIT
TIME-OFFSET = "Z" / TIME-NUMOFFSET
TIME-NUMOFFSET = ("+" / "-") TIME-HOUR ":" TIME-MINUTE
STRUCTURED-DATA = NILVALUE / 1*SD-ELEMENT
SD-ELEMENT = "[" SD-ID *(SP SD-PARAM) "]"
SD-PARAM = PARAM-NAME "=" %d34 PARAM-VALUE %d34
SD-ID = SD-NAME
PARAM-NAME = SD-NAME
PARAM-VALUE = UTF-8-STRING ; characters '"', '\' and
; ']' MUST be escaped.
SD-NAME = 1*32PRINTUSASCII
; except '=', SP, ']', %d34 (")
MSG = MSG-ANY / MSG-UTF8
MSG-ANY = *OCTET ; not starting with BOM
MSG-UTF8 = BOM UTF-8-STRING
BOM = %xEF.BB.BF
UTF-8-STRING = *OCTET ; UTF-8 string as specified
; in RFC 3629
OCTET = %d00-255
SP = %d32
PRINTUSASCII = %d33-126
NONZERO-DIGIT = %d49-57
DIGIT = %d48 / NONZERO-DIGIT
NILVALUE = "-"
This grammar defines nonstructured as well as structured presentations. So very basically, the Syslog message consists of the following basic form:
<PRI> TIMESTAMP TAG MESSAGE
The PRI value is an integer number which calculates by the following metric:
8 x (facility code) + (severity code)
where the individual codes are those:
Facilities:
0 kernel messages
1 user-level messages
2 mail system
3 system daemons
4 security/authorization messages
5 messages generated internally by syslogd
6 line printer subsystem
7 network news subsystem
8 UUCP subsystem
9 clock daemon
10 security/authorization messages
11 FTP daemon
12 NTP subsystem
13 log audit
14 log alert
15 clock daemon (note 2)
16 local use 0 (local0)
17 local use 1 (local1)
18 local use 2 (local2)
19 local use 3 (local3)
20 local use 4 (local4)
21 local use 5 (local5)
22 local use 6 (local6)
23 local use 7 (local7)
Severities:
0 Emergency: system is unusable
1 Alert: action must be taken immediately
2 Critical: critical conditions
3 Error: error conditions
4 Warning: warning conditions
5 Notice: normal but significant condition
6 Informational: informational messages
7 Debug: debug-level messages
The TIMESTAMP may be the NILVALUE if there is no time available.
2.2 Enable my local Syslog daemon to receive log messages over the network
Running a NATTY Ubuntu, I noticed that modern Ubuntu distros use Rainer Gerhards' rsyslog implementation.
It has a section in the config file /etc/rsyslog.conf which just needs to be uncommented:
# provides UDP syslog reception $ModLoad imudp $UDPServerRun 514
Upon restarting the rsyslog service with the command service rsyslog restart you can check with netstat -tulpen if the service is listening on UDP port 514.