Ubuntu その10 「 rsyslog をC言語で使ってみる 」 | 乖離のぶろぐ(*´∀`)吸い込んで応援
http://ameblo.jp/pochifx/entry-11690619857.html
Ubuntu その9 「Server 12.04.3 LTS、kubuntu、cURL」
(゚ω゚)の続き。
(゚ω゚) rsyslogは要るだろう。Ubuntuのrsyslogを検索。

http://siguniang.wordpress.com/2012/11/17/configure-rsyslog-on-ubuntu/
Ubuntu 固有の環境情報
実行ユーザは root ではなく syslog(RetHat では root)
Ubuntu 12.04 では、設定ファイルは以下のパスにある
/etc/rsyslog.conf — main setting
/etc/rsyslog.d/20-ufw.conf — setting for ufw
/etc/rsyslog.d/50-default.conf — other settings

(゚ω゚)さっそく、ユーザーがあるか見てみたら・・・

pochifx@ubuntu64:~$ rsyslog
コマンド 'rsyslog' は見つかりませんでした。もしかして:
Command 'dsyslog' from package 'dsyslog' (universe)
Command 'rsyslogd' from package 'rsyslog' (main)
rsyslog: コマンドが見つかりません
pochifx@ubuntu64:~$ id rsyslog
id: rsyslog: そのようなユーザーは存在しません
pochifx@ubuntu64:~$

(゚ω゚)入ってないのか? confやプロセスを確認してみると・・・

pochifx@ubuntu64:/etc$ ls -la rsys*
-rw-r--r-- 1 root root 1263 6月 6 04:24 rsyslog.conf

rsyslog.d:
合計 28
drwxr-xr-x 2 root root 4096 11月 14 01:03 .
drwxr-xr-x 137 root root 12288 11月 17 19:09 ..
-rw-r--r-- 1 root root 311 3月 17 2012 20-ufw.conf
-rw-r--r-- 1 root root 1655 6月 6 04:24 50-default.conf
-rw-r--r-- 1 root root 242 2月 21 2013 postfix.conf
pochifx@ubuntu64:/etc$ ps -ef | grep rsyslog
syslog 3544 1 0 19:09 ? 00:00:00 rsyslogd -c5
pochifx 3607 2107 0 19:21 pts/0 00:00:00 grep --color=auto rsyslog
pochifx@ubuntu64:/etc$


(゚ω゚)syslogさんが起動してるrsyslogdだったのか・・
(゚ω゚)syslogとrsyslogの2つは必要だとわかる。
(゚ω゚)ソースはUbuntuのパッケージに含まれていないのかな?
http://packages.ubuntu.com/
precise (12.04LTS)

(゚ω゚)ubuntu-12.04.3-server-amd64.isoを使っているから、preciseだろう。
http://packages.ubuntu.com/precise/
すべてのパッケージ
http://packages.ubuntu.com/precise/allpackages
rsyslog (5.8.6-1ubuntu8)
reliable system and kernel logging daemon
rsyslog-doc (5.8.6-1ubuntu8)
documentation for rsyslog
rsyslog-gnutls (5.8.6-1ubuntu8) [universe]
TLS protocol support for rsyslog
rsyslog-gssapi (5.8.6-1ubuntu8) [universe]
GSSAPI authentication and encryption support for rsyslog
rsyslog-mysql (5.8.6-1ubuntu8) [universe]
MySQL output plugin for rsyslog
rsyslog-pgsql (5.8.6-1ubuntu8) [universe]
PostgreSQL output plugin for rsyslog
rsyslog-relp (5.8.6-1ubuntu8) [universe]
RELP protocol support for rsyslog

(゚ω゚)Moun Package Manager で使えそうな rsyslog を3つインストール。
$乖離のぶろぐ(*´∀`)吸い込んで応援

(゚ω゚)rsyslogに競合するログはあるのか?
http://www.atmarkit.co.jp/ait/articles/0810/31/news147_2.html
>競合するパッケージ(klogdやsysklogd)

(゚ω゚)klogは入っていなかった。
$乖離のぶろぐ(*´∀`)吸い込んで応援

(゚ω゚)インクルードファイルは無い。。syslogを使ったアプリだったらビルドできそうだ。

pochifx@ubuntu64:/etc$ du -a /usr/include | grep syslog
4 /usr/include/x86_64-linux-gnu/bits/syslog-ldbl.h
4 /usr/include/x86_64-linux-gnu/bits/syslog-path.h
4 /usr/include/x86_64-linux-gnu/bits/syslog.h
8 /usr/include/x86_64-linux-gnu/sys/syslog.h
4 /usr/include/syslog.h
pochifx@ubuntu64:/etc$


(゚ω゚)こまった時のIBM様。
(゚ω゚)rsyslog使いたい!と思ったが、よく分かってなかったことに気づく・・
http://www.ibm.com/search/csass/search/?q=rsyslog&sn=dw&lang=ja&cc=JP&en=utf&hpp=20&dws=dwjapan&lo=ja&Search=%E3%81%AE%E6%A4%9C%E7%B4%A2
http://www.ibm.com/developerworks/jp/linux/library/l-kernel-logging-apis/
カーネル・ロギング: API と実装
カーネルからユーザー空間までのログの流れ
$乖離のぶろぐ(*´∀`)吸い込んで応援
カーネル内でカーネル・ログ・メッセージが作成されて、カーネルのリング・バッファーに保管され、syslog/klogctl または /proc/kmsg でユーザー空間に転送された後、rsyslog ロギング・フレームワークによってメッセージが最終的に保管される /var/log サブツリーにルーティングされる流れを説明しました。

(゚ω゚)rsyslogに競合するアプリは入れていない。
(゚ω゚)今回の目標は、rsyslogのファシリティなので、
(゚ω゚)C言語ではsyslogのAPIを使って、rsyslogのログに残るかを試してみよう。

■/etc/rsyslog.d/50-default.confを変更する。

root@ubuntu64:/etc# tail rsyslog.conf
#
# Where to place spool files
#
$WorkDirectory /var/spool/rsyslog

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

root@ubuntu64:/etc#

(゚ω゚)IncludeConfigっていう奴が書いてあって、
(゚ω゚)複数の.confが読み込まれるのですよ。(と、なにも調べずに納得)
(゚ω゚)今回は、読み込まれる「*.conf」側を変更する。


root@ubuntu64:/etc/rsyslog.d# ls -la
合計 32
drwxr-xr-x 2 root root 4096 11月 17 22:52 .
drwxr-xr-x 137 root root 12288 11月 17 22:25 ..
-rw-r--r-- 1 root root 311 3月 17 2012 20-ufw.conf
-rw-r--r-- 1 root root 1654 11月 17 22:52 50-default.conf
-rw-r--r-- 1 root root 1655 6月 6 04:24 50-default.conf.bak

-rw-r--r-- 1 root root 242 2月 21 2013 postfix.conf
root@ubuntu64:/etc/rsyslog.d# diff 50-default.conf.bak 50-default.conf
15c15
< #user.* -/var/log/user.log
---
> user.* -/var/log/user.log
root@ubuntu64:/etc/rsyslog.d#

(゚ω゚)どこをどう変更したのかは、上記のとおり。
(゚ω゚)変更の意味は
(゚ω゚)#により無効になっていた「userの全てのレベルのログ」を有効(出る様)にした。
(゚ω゚)という意味。ちなみに、
(゚ω゚)user.*ではなくuser.errにすると、levelがエラー以上しかログに残らなくなる。

(゚ω゚) コンフィグファイル「50-default.conf」を変更したため、サービスを再起動。
service rsyslog --full-restart


(゚ω゚)C言語でrsyslogのログを作りたいから、APIは以下のマニュアルを参考にする。
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/syslog.3.html
closelog, openlog, syslog, vsyslog - システムロガーにメッセージを送る

(゚ω゚)動作確認のmain関数。
(゚ω゚)変数priorityを変えてみて、/var/log/user.logが作られるか試してみる。


/*
* File: main.cpp
* Author: USER
*
* Created on 2013/11/17, 20:31
*/
#include <cstdlib>
#include <syslog.h>
using namespace std;

/*
*
*/
int main(int argc, char** argv) {

// http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/syslog.3.html
// openlog
const char *ident = "Application_3";
int option = LOG_NDELAY; // ログ記録用プログラムとの接続を即座に開始
int facility = LOG_USER;

// syslog
// int priority = facility | LOG_WARNING;
int priority = facility | LOG_ERR;
const char *format = "[%10s]%d";

openlog(ident, option, facility);
syslog(priority, format, "EAAA", 15);
closelog();

return 0;
}



(゚ω゚)動作確認できたから、SVNにコミットしておきましょうか。
(゚ω゚)SVNの使い方は過去ログ参照。
http://ameblo.jp/pochifx/entry-11486015813.html
Ubuntu その3 「gcc と NetBeans と svn」
2013-03-08
$乖離のぶろぐ(*´∀`)吸い込んで応援