リモートsyslog

このページの場所

https://www.si-linux.co.jp/catwiki/
 -> リモートsyslog

printf()デバッグの気楽さをそのままにリモートでログを保存するtips

Cプログラム

マクロの定義

#include <stdio.h>
#include <syslog.h>

#define DEBUG

#ifdef DEBUG
#define debug_printf(format, ...) \
do{ \
	syslog(LOG_DEBUG, "%s:%d:%s() " format, __FILE__, __LINE__,__func__,##__VA_ARGS__); \
	fflush(stderr); \
} while(0)
#else
#define debug_printf(format, ...)
#endif

#define info_printf(format, ...) \
do{ \
	syslog(LOG_INFO, "%s:%d:%s() " format, __FILE__, __LINE__,__func__,##__VA_ARGS__); \
	fflush(stderr); \
} while(0)
debug_printf() デバッグ時のみ必要な情報を出力するマクロ
info_printf()  一般情報を出力するマクロ

どちらも printf()と同様に使う

使い方

openlog(NULL, LOG_PERROR|LOG_PID, LOG_USER);
        /* LOG_PERROR は標準エラー出力にも出力 */
        /* LOG_PID は pidも出力 */
debug_printf("ここまで来た\n");
info_printf("x=%d, y=%d\n",x,y);

ソース全部 filemain.c

転送元_組み込み機器

  • /etc/hosts

ログ転送先ホスト名を解決できるようにする。loghostが転送先

192.168.1.2     loghost
  • /etc/rsyslog.d/local.conf
*.*     @(z9)[loghost]

:programname, isequal, "a.out"  /var/log/local.log
& ~
  • 全てのログを loghost に転送
  • プログラム名 a.out を /var/log/local.log に出力

再起動または

# /etc/init.d/rsyslog restart

転送先_ログサーバ

  • /etc/rsyslog.conf

UDP/514 と TCP/514 の着信を設定

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1,192.168.1.0/24,172.16.0.0/16
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$AllowedSender TCP, 127.0.0.1,192.168.1.0/24,172.16.0.0/16

$AllowedSenderはUDPとTCP別々に書きます。ホスト名は,で複数指定できますが,の前後にスペースを入れてはいけません。

  • /etc/rsyslog.d/remote.conf
$template RemoteHost,"/var/log/remote/%HOSTNAME%.log"

:fromhost-ip, !isequal, "127.0.0.1" -?RemoteHost
& ~

ローカルホスト(127.0.0.1)以外は /var/log/remote/ホスト名.log に保存する

再起動または

# /etc/init.d/rsyslog restart

関連