続Shibboleth-IdPのログをfluentdのin_tailで拾うための正規表現
Shibboleth-IdPのログをfluentdのin_tailで拾うための正規表現 - kame-tの日記
の続きでidp-process.logを取り込む
Shibboleth-IdPのデフォルトの設定では
<Pattern>%date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n</Pattern>
となっている
(1) ミリ秒の表記は
instance method Time#strftime
から"%L"でOK
(2) Javaのエラーが複数行に渡る問題は
tomohisaota/fluent-plugin-tail-multiline · GitHub
のpluginで対応できる
fluent.confには
<source> type tail_multiline path /opt/shibboleth-idp-2.4.0/logs/idp-process.log format /^(?<time>[^ ]+) - (?<level>[^ ]+) \[(?<logger>[^\:]*)\:(?<line>[^\]]*)\] - (?<message>.*)/ time_format %H:%M:%S.%L tag shibboleth-idp.process </source>
と書くとよさそう
Shibboleth-IdPのログをfluentdのin_tailで拾うための正規表現
Shibboleth-IdPも複数台で運用して
ログも分散するようになって集計も面倒になってきたので
fluentdで集約してみようと一念発起
Shibboleth-IdPのログはマニュアル
IdPLogging - Shibboleth 2.x - Confluence
に書かれているが要はパイプ'|'で区切ってログ情報が出力されている
ただしidp-audit.logのserverHostとserverPortの区切りがコロン':'なので注意
fluent.confには
<source> type tail path /opt/shibboleth-idp-2.4.0/logs/idp-access.log format /^(?<time>[^\|]+)\|(?<remoteHost>[^\|]*)\|(?<serverHost>[^\:]*)\:(?<serverPort>[^\|]*)\|(?<requestPath>[^\|]*)\|$/ time_format %Y%m%dT%H%M%S%Z tag shibboleth-idp.access </source> <source> type tail path /opt/shibboleth-idp-2.4.0/logs/idp-audit.log format /^(?<time>[^\|]+)\|(?<requestBinding>[^\|]*)\|(?<requestId>[^\|]*)\|(?<releyingPartyId>[^\|]*)\|(?<messageProfileId>[^\|]*)\|(?<assertingPartyId>[^\|]+)\|(?<responseBinding>[^\|]*)\|(?<responseId>[^\|]*)\|(?<principalName>[^\|]*)\|(?<authNMethod>[^\|]*)\|(?<releasedAttributeId>[^\|]*)\|(?<nameIdentifier>[^\|]*)\|(?<assertionID>[^\|]*)\|$/ time_format %Y%m%dT%H%M%S%Z tag shibboleth-idp.audit </source>
と書くとよさそう
下記でテストできた
fluentdのformat(正規表現)の作り方について試行錯誤中 #fluentd - Glide Note - グライドノート
Fluentdでparser用の正規表現を書く・試す - tagomorisのメモ置き場
Fluentular: a Fluentd regular expression editor
RHEL6のlogrotateのcompress(gzip)でNFSv4のACLが上書きされる
RHEL6のApache-HTTPDのログファイルにNFSv4のACLを付与している
logrotateで
普通の新ログファイル生成はnocreateでWebサーバまかせにしていて
この場合はちゃんと上位ディレクトリのデフォルトACLを引き継いでいる
しかしcompress(gzip)したログファイルに関しては
デフォルトACLを引き継がず新しいACLが上書きされていた
logrotate-3.7.8-16.el6のSRPMを拾ってきて調べると
logrotate.cにおいて
static int compressLogFile(char *name, struct logInfo *log, struct stat *sb) { char *compressedName; const char **fullCommand; int inFile; int outFile; int i; int status; : outFile = createOutputFile(compressedName, O_RDWR | O_CREAT | O_TRUNC, sb, prev_acl, 0); #ifdef WITH_ACL if (prev_acl) { acl_free(prev_acl); prev_acl = NULL; } #endif
とcompressLogFileでcreateOutputFileしている
ここでWITH_ACLと書いているのはPOSIX ACLのこと
createOutputFileでなにをしているかというと
同じくlogrotate.cにおいて
int createOutputFile(char *fileName, int flags, struct stat *sb, acl_type acl, int force_mode) { int fd; char template[PATH_MAX + 1]; mode_t umask_value; struct stat sb_create; int acl_set = 0; snprintf(template, PATH_MAX, "%s/logrotate_temp.XXXXXX", ourDirName(fileName)); : if (!acl_set || force_mode) { if (fchmod(fd, sb->st_mode)) { message(MESS_ERROR, "error setting mode of %s: %s\n", fileName, strerror(errno)); close(fd); unlink(template); return -1; } }
のようにchmodしてたのでここで上書きされていたのが原因
まあPOSIX ACLみたいなパッチを書けばいいと思うけど
そんな頑なにgzipしなければいけないわけでもないので
とりあえずnocompress(gzipなし)で運用
CentOS6ではlogrotateの標準(エラー)?出力は/dev/nullに落ちる
CentOS5では標準(エラー)?出力をメールでくれるのに
CentOS6ではlogrotateの設定のpostrotateなどで出力してもメールがこない
これはRHEL6やSL6も同様
とりあえず下記のようにコメントアウトした
/etc/cron.daily/logrotate
/usr/sbin/logrotate /etc/logrotate.conf #>/dev/null 2>&1
ちなみにFedora20では再び出力するように変更されている
Fedora17でも出力されるみたいなのでCentOS7は大丈夫でしょ
389-dsでマルチマスタ
CentOS5に389-dsをインストール - kame-tの日記
389-dsで2000件以上検索できないとき - kame-tの日記
389-dsで外部で取得したサーバ証明書を設定 - kame-tの日記
の続き
マルチマスタ構成にする場合
11.5. Configuring Multi-Master Replication
Stray Penguin - Linux Memo (389 DS-5)
でOKですが
server1->server2のレプリカID(nsDS5ReplicaId)と
server1<-server2のレプリカIDは別の番号にしておく必要があるので要注意
一旦IDを付与すると
レプリカの設定自体を削除して再設定しないといけない
dse.ldifを編集しただけではNGだった
389-dsで外部で取得したサーバ証明書を設定
以前書いた
CentOS5に389-dsをインストール - kame-tの日記の続き
すでに取得したサーバ証明書を使って
ldapsを動作させる
答えはここ
http://www.redhat.com/archives/fedora-directory-users/2009-December/msg00162.html
にあるけど要はp12ファイルにして取り込むとよい
% sudo openssl pkcs12 -export -in /etc/pki/tls/certs/cert.pem -inkey /etc/pki/tls/private/key.pem -out /etc/pki/tls/certs/cert.p12 -nodes -name 'servername' % cd /etc/dirsrv/slapd-[INSTANCE_NAME]/ % sudo pk12util -d . -i /etc/pki/tls/certs/cert.p12
あと関連のCA証明書を中間証明書も一緒に登録する
% cd /etc/dirsrv/slapd-[INSTANCE_NAME]/ % sudo certutil -d . -A -n 'middle' -t CT,, -a -i /etc/pki/tls/certs/middle.crt % sudo certutil -d . -A -n 'root' -t CT,, -a -i /etc/pki/tls/certs/root.crt
こっから先はGUIで
% 389-console &
- 「[INSTANCE_NAME]」openして
- 「Tasks」タブの「Manage Certificates」で
- 「Server Certs」と「CA Certs」を確認
- 「[INSTANCE_NAME]」の「Configuration」タブを開き「Enable SSL for this server」をチェック
- 「Use this cipher family RSA」をチェックして「Certificate」をインストール済みの証明書を選択
- 「Chipher」で弱い暗号化方法はチェックを外す
- 「Save」したあとconsoleを閉じる
636番ポートはGUIではでなくroot権限でないと開けないので
再びコマンドで
% sudo service dirsrv restart
をする
% openssl s_client -connect 127.0.0.1:636
でサーバ証明書を確認して
% ldapsearch -x -H ldaps://[HOSTNAME] -D [ADMIN_DN] -W -b [BASE_DN]
で動作を確認する(上記はOpenLDAPのldapsearch)
NFSのidmapのキャッシュクリア
NFSv4クライアント側にUIDを作り忘れて
あわてて作ったけどすでにUIDがnobody状態で
再mountしてもrpcidmapdを再起動してもUIDが変わらない件@RHEL6は
キャッシュとクリアするとよい
% sudo /usr/sbin/nfsidmap -c