2020年4月9日木曜日

dovecot-sysreportコマンドが追加されました

先日(2020/03/06)リリースされたDovecotのver2.3.10に新しいコマンドdovecot-sysreportが追加実装されました。

リリースノートには下記のように説明があります。
+ Add tool for generating sysreport called dovecot-sysreport.
  This generates a bundle of information usually needed for support
  requests.

サポートに問い合わせをする際に必要な設定情報やシステムの稼働情報などを収集するようです。

何もオプションをつけずに実行すると、カレントディレクトリにtar.gzで情報が固められて採取されます。
こんな感じです。

# dovecot-sysreport
Gathering configurations ...
Gathering system informations ...
Creating archive ...
All done! Please report file dovecot-sysreport-example.com-1584975066.tar.gz
Removing temp files at /tmp/tmp.6SmnOgn2To ...
#
# tar ztvf dovecot-sysreport-example.com-1584975066.tar.gz
drwxr-xr-x root/root         0 2020-03-23 23:51 conf/
-rw-r--r-- root/root       637 2020-03-23 23:51 conf/dovecot.conf
-rw-r--r-- root/root         0 2020-03-23 23:51 log_errors
-rw-r--r-- root/root       885 2020-03-23 23:51 process_status
-rw-r--r-- root/root      1057 2020-03-23 23:51 ps_output
-rw-r--r-- root/root      9883 2020-03-23 23:51 service_status
-rw-r--r-- root/root       183 2020-03-23 23:51 stats_dump
-rw-r--r-- root/root       207 2020-03-23 23:51 uptime_output
#
※自分の鯖は、障害もなく(また負荷もなく)稼働しているので、これは!?といった情報は採取できませんでした。


コマンドそのものはシェルスクリプトで書かれているので、dovecotのトラブルシューティングをする時にサポート側はどんな情報が欲しいのか、dovecotの運用者は一度中身を確認しておくと良いかもしれませんね。


2018年1月8日月曜日

Dovecot community repositoriesが公開されました

2017年12月28日に、Dovecot純正(?)のリポジトリ(https://repo.dovecot.org/)が利用できるようになったとアナウンスされました。

Debian/Ubuntu/CentOS向けに最新のパッケージが提供されるようになったので、ここではCentOS6.9の環境でインストールを実施してみます。

[root@cent6 ~]# cat << END > /etc/yum.repos.d/dovecot.repo
> [dovecot-2.3-latest]
> name=Dovecot 2.3 CentOS \$releasever - \$basearch
> baseurl=http://repo.dovecot.org/ce-2.3-latest/centos/\$releasever/RPMS/\$basearch
> gpgkey=https://repo.dovecot.org/DOVECOT-REPO-GPG
> gpgcheck=1
> enabled=1
> END
[root@cent6 ~]#
[root@cent6 ~]# yum install dovecot
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
dovecot-2.3-latest                                                 | 2.9 kB     00:00
Resolving Dependencies
--> Running transaction check
---> Package dovecot.x86_64 2:2.3.0-4 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================
 Package         Arch       Version       Repository                Size
=========================================================================
Installing:
 dovecot        x86_64      2:2.3.0-4     dovecot-2.3-latest        4.0 M
Transaction Summary
=========================================================================
Install       1 Package(s)
Total download size: 4.0 M
Installed size: 13 M
Is this ok [y/N]: y
Downloading Packages:
dovecot-2.3.0-4.x86_64.rpm                                          | 4.0 MB     00:18
warning: rpmts_HdrFromFdno: Header V4 RSA/SHA1 Signature, key ID ed409da1: NOKEY
Retrieving key from https://repo.dovecot.org/DOVECOT-REPO-GPG
Importing GPG key 0xED409DA1:
 Userid: "Dovecot Community Edition <dovecot-ce@dovecot.org>"
 From  : https://repo.dovecot.org/DOVECOT-REPO-GPG
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : 2:dovecot-2.3.0-4.x86_64                                  1/1
  Verifying  : 2:dovecot-2.3.0-4.x86_64                                  1/1
Installed:
  dovecot.x86_64 2:2.3.0-4
Complete!
[root@cent6 ~]#

 ※OS標準のdovecot-2.0.9がインストールされている場合でも、yum updateすれば問題なく最新のバージョンにアップデートされます

2016年7月13日水曜日

SSH 特定のIPアドレスからrootアクセスを許可するには(Match Address)

通常はrootによるSSHアクセスは認めない。
しかし、何かしらのスクリプトの動作上、特定のIPアドレス(ホスト)からのみrootでのアクセスを例外として許可したい。。
という状況を”Match Address”ディレクティブで実現しようというのが、今回の内容です。

※評価は、CentOS 6.8(x86_64)で、sshd_configに以下の設定がされている環境で実施しています
 ⇒ rootによるアクセスもパスワードによる認証も許可していません

PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication no


実際の設定 2例

sshd_configの最下行にでも追記を行います。

1. アクセスもとのIPアドレスが192.168.0.11と192.168.0.12の場合、パスワード認証以外であればrootによるアクセスを許可
 ※複数のIPアドレスを指定する場合は、カンマで区切ります
Match Address 192.168.0.11, 192.168.0.12
        PermitRootLogin without-password


2. アクセスもとのIPアドレスが192.168.0.11の場合、パスワードによる認証を許可
Match Address 192.168.0.11
        PermitRootLogin yes
        PasswordAuthentication yes


2016年5月4日水曜日

CentOS6.x 最新のpostfixとdovecotをRPMで導入する

2018/01/08追記: dovecot.orgにてタイムリーにdovecotの最新パッケージが提供されるようになりました。
         「Dovecot community repositoriesが公開されました」を参照してください


以前に、CentOS6.4で最新DovecotをRPMで導入するという記事を書いていますが、2016年5月現在では新しいバージョンへの追随はしていないようです。

自分の場合、最近、より最新バージョンのRPMを準備する別手段としてGhettoForgeリポジトリを使う事がわりと多いので、今回はそれについてまとめてみます。
※2016年5月現在、postfixはバージョン3.1.0、dovecotはバージョン2.2.23が導入可能です



リポジトリの導入


以下のコマンドを実行します。
結果、複数のリポジトリ[gf/gf-plus/pf-testing]が利用可能になります。
※詳細はUsageのページで確認をしてください
#rpm -ivh http://mirror.symnds.com/distributions/gf/el/6/gf/x86_64/gf-release-6-10.gf.el6.noarch.rpm


postfix3.1.0のインストール


postfix3.1.0はpf-plusリポジトリに存在するので、以下のようにインストールします。
※ OSインストール時にデフォルトでバージョン2.6.xがインストールされているはずなので、そのままだとconflictsのエラーが出てしまいます。その場合は一旦バージョン2.6.xをアンインストールする必要があります。
(# rpm -e --nodeps postfix)   <-★conflictsのエラーが出る場合実施
# yum --enablerepo=gf-plus install postfix3


dovecot2.2.23のインストール


dovecot2.2.23はgf-testingリポジトリに存在するので、以下のようにインストールします。
※将来的には、gf-testingリポジトリからgf-plusリポジトリに移行されると思うので、その際は"--enablerepo=gf-plus"と指定を変更してください
# yum --enablerepo=gf-testing install dovecot22



その他

1. GhettoForgeリポジトリを使いやすくする為にエイリアスを登録する

パッケージのインストールやアップデートの度に”--enablerepo=xxxx”と入力するのは面倒なので、自分の場合は、~/.bashrcに以下の内容でエイリアスとして登録しています。
これで、myum installやmyum updateのように入力した時だけ、GhettoForgeリポジトリを利用するようにしています。

alias myum='yum --enablerepo=gf-plus,pf-testing'


2. GhettoForgeリポジトリからpostfixとdovecot以外のパッケージが導入されないようにする

これはGhettoForgeのサイトにも書いてある内容ですが、GhettoForgeリポジトリにはpostfixやdovecot以外にも多数のパッケージが用意されています。postfixとdovecot以外の他のパッケージが意図せず導入されないように、利用するパッケージを限定しておきます。


具体的には、/etc/yum.repos.d/gf.repoファイル内の[gf-plus]リポジトリと[gf-testing]リポジトリのそれぞれにincludepkgs行を追記します。

[gf-plus]
name=Ghettoforge packages that will overwrite core distro packages.
mirrorlist=http://mirrorlist.ghettoforge.org/el/6/plus/$basearch/mirrorlist
# Please read http://ghettoforge.org/index.php/Usage *before* enabling this repository!
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el6
failovermethod=priority
includepkgs=postfix* dovecot*


[gf-testing]
name=GhettoForge packages that are currently untested.
mirrorlist=http://mirrorlist.ghettoforge.org/el/6/testing/$basearch/mirrorlist
# This repo may contain packages that overwrite core distro packages.  Please
# read http://ghettoforge.org/index.php/Usage before enabling this repository.
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-gf.el6
failovermethod=priority
includepkgs=postfix* dovecot*

2016年3月3日木曜日

作業ミスを減らすために

今回はいつもと趣向をかえて、作業ミスを減らす為に自分が必ずする初期設定について書こうと思います。
(たいした事ではありませんが、視覚に訴えるものを3つほど紹介します。)

※以下、基本的にベースはRedhat系として記述します


1.ファイルとディレクトリなどを見分けやすく


lsコマンド実行時にファイルなのかディレクトリなのか識別しやすくする為に、”ls -F”や”ls -l”とオプションを付けて実行すると思います。ただ毎回オプションをつけて実行するのも面倒なので、手短にlsと入力すれば”ls -F”の出力結果が返ってくるようにしています。

その際にどの作業環境(コンソールやその他仮想端末を問わず)・どのユーザでも統一された状態で実行されるように、システム全体に効くエイリアス(alias)として登録しています。

具体的には、/etc/profile.d/colorls.sh ファイル内で以下の記述部分を変更します。

(変更前)
alias ls='ls --color=tty' 2>/dev/null

(変更後)
alias ls='ls -F --color=tty' 2>/dev/null
※変更後、ログインし直すか、source /etc/profile.d/colorls.sh とする事で変更が適用されます



2.vimの色分けを有効にする


※この内容を試すにはvim-enhancedパッケージが導入されている必要があります

設定ファイル類をvimで編集するとある程度syntaxにそって色分けがされ、見通しが良くなると思います(単純な対となる記号の記述もれなどsyntaxがおかしいと色のつき方が変になるので、すぐに何かがおかしいと気づくはずです)。

ただ、設定ファイルを編集するケースの多いrootユーザだと色分けされずに白黒のまんまなので?と思った事はありませんか?
※何かしら理由があるとは思うのですが、調べてません...

前置きが長くなりましたが、具体的には/etc/profile.d/vim.shでその設定がされているので、以下の記述を残して他の記述は全てコメントアウトします。

これで、どのユーザ・どの端末でも同じようにsyntaxに沿って色分けがされるようになります。

alias vi >/dev/null 2>&1 || alias vi=vim
※変更後、ログインし直すか、source /etc/profile.d/vim.sh とする事で変更が適用されます



3.rootユーザのプロンプトに色を付ける


なにかというと、rootユーザになったらプロンプトの部分に色をつけて、rootで作業をしているよ!!という事を意識するようにしています。

具体的には、以下の内容を~/.bashrcに記述しています。
こうすることでプロンプトが赤くなります。

export PS1="\[$(tput bold)$(tput setaf 1 2)\][\u@\h \W]# \[$(tput sgr0)\]"



2016年2月2日火曜日

CentOS6(RHEL6) 起動するtty(仮想コンソール)を調整する

今回はタイトルの通り、CentOS6(RHEL6)では初期に6つ起動するtty(仮想コンソール)を調整する方法についてです。
※普段Puttyなどでリモートから作業をするなら、コンソールを使って作業する事も稀でしょうから、
 使わないものはメモリの消費を抑える意味でも起動しないように調整しましょう。


ttyの起動数を減らす設定


CentOS6(RHEL6)では、/etc/sysconfig/initファイル内のACTIVE_CONSOLESの箇所を編集します。
※以下では、tty3~tty6までを停止しています。

(変更前)
ACTIVE_CONSOLES=/dev/tty[1-6]

(変更後)
ACTIVE_CONSOLES=/dev/tty[1-2]



設定の適用方法

2パターンあるので、お好きなほうで適用してください。

1. 再起動をする
 これで起動時に/etc/sysconfig/initファイルを読み込んで/dev/tty1と/dev/tty2だけあがっている状態になります。

2. 以下のコマンドを実行する
 ※停止する仮想コンソール分、実行します
 ※こちらは再起動は必要ありません

# initctl stop tty TTY=/dev/tty3
# initctl stop tty TTY=/dev/tty4
# initctl stop tty TTY=/dev/tty5
# initctl stop tty TTY=/dev/tty6








2016年1月14日木曜日

Dovecot Enterpriseについて(2016年1月現在)

2018/01/08追記:いつのまにかリポジトリにアクセスできなくなったので、問い合わせをしました。
         以下のような返信をもらいました。
         要するに一般ユーザーには、同エディションは提供されないようです。
We have done some maintenance for expired accountsbecause we no longer have webshop and we don't provide dovecot-eerepository access without valid support contract with us.

Next year we disable all accounts without active support contract withus but start providing Dovecot Communition Edition packages for free. Wesend information about this change later.


2013年7月14日に「Dovecot Enterprise Editionについて」という記事を書きましたが、

今回はタイトルの通りDevecot Enterpriseのその後についてです。



・今はそもそも「Dovecot Pro」と呼ぶようです

・リポジトリにアクセスするためのユーザ名とパスワードを入手する方法が「Contact US」だけになったようです
 → 過去にWebから購入したライセンスはそのまま継続して利用できるようです


・Dovecot Enterprise Editionを入手するためのリポジトリのURLsが、変更されています
 → http://software.open-xchange.com/products/dovecot/doc/Dovecot-EE-repository-and-object-storage-installation-manual_v1.9.pdf




2015年8月5日水曜日

Postfwd キャッシュの取り扱い

postfwdはルールセットにマッチしたものをキャッシュとして保持し、以降、保持期間が過ぎるまでキャッシュを利用して応答します。
今回は、そのキャッシュについてまとめてみます。

※評価は、CentOS6.6(x86_64) + Postfwd2 v1.35で行っています
※また、以下のようなドメイン名の入力ミスにエラーをかえすルールセットを作って行っています
id=WRONG_DOMAINS
        recipient_domain = (gmal.com|gmaile.com)
        action = REJECT Isn't it gmail.com?



キャッシュの保持期間


これは、Postfwdの起動時の引数として指定する"--cache"の値で決まります。
※キャッシュに関するオプションは結構あるので、"postfwd2 -m"と実行し、Cache:の箇所を確認してみてください。



キャッシュの内容確認


”--dumpcache”オプションで確認する事ができます。
以下、出力例です(変な改行が入って見にくいですが、"%request_cache ->"から次の"%request_cache ->"のところまでが1行です)。
# postfwd2 --dumpcache
%request_cache -> %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @action -> 'REJECT Isn't an address gmail.com?'
%request_cache -> %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @hit    -> '3'
%request_cache -> %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @hits   -> 'WRONG_DOMAINS'
%request_cache -> %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @id     -> 'WRONG_DOMAINS'
%request_cache -> %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @ttl    -> '600'
%request_cache -> %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @until  -> '1438783060.04902'

※各行のお尻の部分だけに注目すると内容を把握しやすいと思います。
@action -> 'REJECT Isn't an address gmail.com?'
@hit    -> '3'
@hits   -> 'WRONG_DOMAINS'
@id     -> 'WRONG_DOMAINS'
@ttl    -> '600'
@until  -> '1438783060.04902'


キャッシュのクリア


基本的にpostfwdの再起動をすればキャッシュはクリアされますが、全てのキャッシュが対象になってしまいます。
そうではなく、間違ってキャッシュしてしまった一部のキャッシュだけ削除する場合は以下のように実施します。

書式は以下のようになります。
# postfwd2 --delcache <item>
この<item>が意外と分かりにくいのですが、"--dumpcache"で出力される以下の青字部分を指定します。
%request_cache ->  %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35; -> @until  -> '1438783708.62979'

以下、実行例です。
# postfwd2 --delcache="  %192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35;"

request cache item '192.168.233.1;unknown;mail.example.com;mail.example.com;SMTP;RCPT;user01@gmal.com;gmal.com;user01;smtpd_access_policy;1.233.168.192;unknown;user01@mail.example.com;mail.example.com;user01;mail.example.com;mail.example.com;mail.example.com;mail.example.com;postfwd2 1.35;' removed
#





2015年7月20日月曜日

S3QL S3互換ストレージが正常にアンマウントできない場合

今回は、S3QLでマウントするストレージに”S3互換ストレージ”を指定した時に遭遇したエラーについて。

具体的には、S3QLでS3互換ストレージをマウントし、データを書き込み、アンマウントしたところ下記のようなエラーが出力されて、その後マウントできない状況になりました。
※マウントする前に、fsck.s3qlをかけても同様のエラーが出力されてしまいます

<アンマウント時のログから抜粋>
2015-07-20 11:33:59.949 16110:MainThread s3ql.mount.main: FUSE main loop terminated.
2015-07-20 11:33:59.954 16110:MainThread s3ql.mount.unmount: Unmounting file system...
2015-07-20 11:34:03.042 16110:MainThread s3ql.mount.main: Dumping metadata...
2015-07-20 11:34:03.042 16110:MainThread s3ql.metadata.dump_metadata: ..objects..
2015-07-20 11:34:03.044 16110:MainThread s3ql.metadata.dump_metadata: ..blocks..
2015-07-20 11:34:03.045 16110:MainThread s3ql.metadata.dump_metadata: ..inodes..
2015-07-20 11:34:03.046 16110:MainThread s3ql.metadata.dump_metadata: ..inode_blocks..
2015-07-20 11:34:03.046 16110:MainThread s3ql.metadata.dump_metadata: ..symlink_targets..
2015-07-20 11:34:03.047 16110:MainThread s3ql.metadata.dump_metadata: ..names..
2015-07-20 11:34:03.048 16110:MainThread s3ql.metadata.dump_metadata: ..contents..
2015-07-20 11:34:03.049 16110:MainThread s3ql.metadata.dump_metadata: ..ext_attributes..
2015-07-20 11:34:03.050 16110:MainThread s3ql.mount.main: Compressing and uploading metadata...
2015-07-20 11:34:03.105 16110:MainThread s3ql.mount.main: Wrote 321 bytes of compressed metadata.
2015-07-20 11:34:03.105 16110:MainThread s3ql.mount.main: Cycling metadata backups...
2015-07-20 11:34:03.105 16110:MainThread s3ql.metadata.cycle_metadata: Backing up old metadata...
2015-07-20 11:34:03.331 16110:MainThread s3ql.backends.s3c.copy: Unexpected server reply to copy operation:
200 OK
Server: Riak CS
ETag: "5df94930a7549cfcd6acab482c9bae94"
Date: Wed, 08 Jul 2015 02:34:03 +0000
Content-Type: application/xml
Content-Length: 175

解決策を探していたところ以下の記述を見つけました。

<ソースに含まれるChanges.txtより>
2014-11-09, S3QL 2.12
  * The s3c backend has a new 'dumb-copy' option. If this option
    is enabled, copy operations are assumed to have succeeded
    as soon as the server returns a '200 OK' status, without
    checking the contents of the response body.

<http://www.rath.org/s3ql-docs/backends.html のS3 compatibleの項目より>
dumb-copy
If this option is specified, S3QL assumes that a COPY request to the storage server has succeeded as soon as the server returns a 200 OK status. The S3 COPY API specifies that the storage server may still return an error in the request body (see the copy proposal for the rationale), so this option should only be used if you are certain that your storage server only returns 200 OK when the copy operation has been completely and successfully carried out. Using this option may be neccessary if your storage server does not return a valid response body for a succesfull copy operation.


ということで最終的には、下記のようにmount.s3qlでマウント時に、バックエンドオプションをプラスする事で解決できました。

# mount.s3ql --allow-other --backend-options=dumb-copy \
> s3c://<hosstname or エンドポイント名など>/<backetname>/ /home/vmail



2015年7月18日土曜日

ログに特定の文字列が出力されたらメールで通知するには(fluentd編)

先日、「ログに特定の文字列が出力されたらメールで通知するには(rsyslog編)」という記事を書きましたが、※ほぼ※同じ事を”fluentd”を使って実現してみましょうというのが今回の内容です。

違いは下記のようになるので、環境(状況)にあわせて使いわけると良いと思います。

  • rsyslogの場合は、1回でも特定の文字列が出力されたら通知が実施されます(2回目以降の通知はある程度抑止できます)。
  • fluentdの場合は、決められた計測時間内に特定文言が決められた回数出力されたらその都度、通知を実施します。  ⇒ 例)10 秒の間に、特定文言が2回出力したらメールで通知(次の10秒でも、特定文言が2回出力されたらまた通知)


※評価は、CentOS6.6(x86_64) + fluentd v0.12.7(gemによる導入)で行っています


fluentdプラグインの導入

※fluetndそのもの導入に関しての説明は割愛させていただきますので、このあたりを参考に導入してください。

今回の目的を達成するのに必要な以下のプラグインを導入します。

・fluent-plugin-grepcounter
・fluent-plugin-mail


fluentdの設定

今回は、以下の条件でメール通知をする設定としました。

・/var/log/messagesに
・単位時間10秒の間に
・”WARN”の文字列が2回以上出力

</etc/fluent/fluent.confの設定例>
<source>
  type tail
  format syslog
  path /var/log/messages
  tag syslog.messages
  pos_file /var/log/fluent/pos_file
</source>

# 特定文言がログに出力されるのをカウントする部分
<match syslog.messages>
  type grepcounter
  count_interval 10
  input_key message
  regexp "WARN"
  threshold 2
  add_tag_prefix warn.count
</match>

# メール通知をする部分
<match warn.count.syslog.messages>
    type mail
    host localhost
    port 25
    from "warn@fluetd.example.com"
    to "user01@fluentd.example.com"
    subject "[URGENT] WARN logging"
    message Total WARN  count: %s\n\nPlease check your logs
    message_out_keys count
</match>

※※各パラメータの意味は、プラグインのREADME.mdで確認してください
<fluent-plugin-grepcounter>
 https://github.com/sonots/fluent-plugin-grepcounter
<fluent-plugin-mail>
 https://github.com/u-ichi/fluent-plugin-mail

※※私の環境では、以下でも確認できました
<fluent-plugin-grepcounter>
 /usr/local/rvm/gems/ruby-2.2.0/gems/fluent-plugin-grepcounter-0.5.5/README.md
<fluent-plugin-mail>
 /usr/local/rvm/gems/ruby-2.2.0/gems/fluent-plugin-mail-0.1.1/README.md



動作検証

fluetndを起動後、Puttyなどの端末を2つ立ち上げて、
  • 1つは以下のようにloggerコマンドを実行(10秒の間に2回以上実施)
  • もう1つは、メールログと/var/log/messagesをtail

する事で動作を確認する事ができます。
#logger WARN

これで、今回設定した”単位時間10秒”に”2回”以上”WARN”の文字列が出力されたら1通ずつメール通知されるようになったと思います。


(参照URL)

http://docs.fluentd.org/articles/splunk-like-grep-and-alert-email



2015年7月8日水曜日

ubuntuでインストール画面がまともに表示されなかったら

2020/04/03追記: コメントを頂いていたので返信をつけました。


また、イントール画面が欠けた場合の回避策としてより手軽な方法として
Windowsキーのあるキーボードをお使いの方であれば、そのWindowsキーを
押しながらインストール画面をドラックすれば欠けた部分を表示させることが
できるので、こちらのほうをお勧めします。
(参考URL)https://kledgeb.blogspot.com/2018/04/ubuntu-1804-96-ubuntu.html



(自分のところではVMware環境に限ってですが)ubuntuをインストールする時に画面の解像度が”640 x 480”に設定されてしまい、ディスクのパーティショニングするところで設定項目が見えない事象が発生しました。

以前にも「Fedora20 インストール画面がまともに表示されなかったら」という記事を書きましたが、それと同様の事象です。


回避策

(参考URL)https://wiki.ubuntulinux.jp/UbuntuTips/Others/BootOptions

Fedora20の時と同じくインストーラーにオプションを渡すことによって回避可能です。
以下、その手順です。


1.インストール開始直後の下記の画面でESCキーを押します。



2.「Ubuntuをインストール」を選択後、「F6 その他のオプション」を選択します。
 ※F6キーを押します。
















3.起動オプションとポップアップメニューが表示されます。
 ※ポップアップメニューはESCキーを押してキャンセルします。



4.起動オプションにフレームバッファの解像度を追記します。
 ※1番最後の”--"の後に追記します。
 ※今回は1024x768の解像度にしたかったので、”vga=791"と指定しています。















(備考)
フレームバッファの解像度がわからない場合、”vga=1024x768”のようにわざと誤った指定をすると下記のようなメニューに進む事ができるので、そこで指定したいモードを選択しても良いかもしれません。














結果、以下のように設定項目全般が見れるようになりました。












2015年7月1日水曜日

rsyslog 圧縮した状態でログを出力するには

今回は、保存されたログを後から加工(gzipなどで圧縮)するのではなく、rsyslog単体でログを出力すると同時に圧縮もしてみよう!という内容です。
※評価は、CentOS6.6(x86_64) + rsyslog-8.10.0で行っています



設定例


以下、ファシリティがmailのログを圧縮した状態で出力する例です。

template(name="for_postfix"
         type="string"
         string="/var/log/postfix/%$year%%$month%%$day%.log.gz"
)

if \
        $syslogfacility-text == "mail" \
then {
        action(
                type="omfile"
                zipLevel="1"
                dynaFile="for_postfix"
        )
        stop
}

※ドキュメントにも書いてありますが、zipLevelで指定する数字が大きくなると圧縮率も高く(良く)なりますが、それに伴ってCPUの使用率も高くなるので、本番環境で設定する場合はそのあたりを十分確認(検証)したうえで設定をしてください。



ログの確認方法


設定例どおりにログが出力されると以下のようになります。
# ls -l /var/log/postfix/
total 4
-rw-r--r-- 1 root root 157 Jun 30 23:43 20150630.log.gz
#
# file /var/log/postfix/20150630.log.gz
/var/log/postfix/20150630.log.gz: gzip compressed data, from Unix, max speed
#

ログは圧縮されている状態なので、zcatやzlessで確認します。
またtailに相当するコマンドはないかさがしたら、そのままずばりのztailコマンドが存在し、tailと同じ操作でログを確認する事ができました。

  • ztailの配布元
http://emysoutlet.com/linux/ztail/index.html


2015年3月12日木曜日

ログに特定の文字列が出力されたらメールで通知するには(rsyslog編)

今回は、rsyslogをswatchのように使ってみようという内容です。
※評価は、CentOS6.6(x86_64) + rsyslog-8.8.0で行っています


以下に、rsyslogの比較的新しいフォーマットでの記述方法と昔ながらの記述方法の2種類を記載します。
⇒ログに'network connection error' あるいは'authentication failures'の文字列が出力されたら、メールでの通知を想定した例です



RainerScript styleフォーマットでの記述例


module(load="ommail")
template(name="mailSubject"
         type="string"
         string="Error on %hostname%"
)
template(name="mailBody"
         type="string"
         string="RSYSLOG Alert\r\nmsg='%msg%'"
)

if \
        ( $msg contains 'network connection error' ) or \
        ( $msg contains 'authentication failures' ) \
then {
        action(
          type="ommail"
          server="localhost"
          port="25"
          mailfrom="alert@rsyslog.example.com"
          mailto="user01@rsyslog.example.com"
          subject.template="mailSubject"
          template="mailBody"
          body.enable="on"
          #action.execonlyonceeveryinterval="3600"
        )
}
※コメントアウトしているaction.execonlyonceeveryintervalパラメータは、メールの通知間隔を調整するのに使います。監視している文字列がログに大量に出力された時に、メールがバーストするのを防ぐ為に利用します。
⇒上記の記述をそのまま有効にした場合、1度メールを送信したら同じメールを送信できるのは1時間(3600秒)後になります



Legacyフォーマットでの記述例


$ModLoad ommail
$template mailSubject,"Error on %hostname%"
$template mailBody,"RSYSLOG Alert\r\nmsg='%msg%'"
$ActionMailSMTPServer localhost
$ActionMailFrom alert@rsyslog.example.com
$ActionMailTo user01@rsyslog.example.com
$ActionMailSubject mailSubject
#$ActionExecOnlyOnceEveryInterval 3600
if \
        ( $msg contains 'network connection error' ) or \
        ( $msg contains 'authentication failures' ) \
then :ommail:;mailBody
※コメントアウトしている部分は、先のaction.execonlyonceeveryintervalパラメータと同じ目的で利用します。



動作検証

Puttyなどの端末を2つ立ち上げておき、

  • 1つはメールログをtail、
  • もう一つで以下のようにloggerコマンドを実行 (⇒私の環境では/var/log/messagesに出力されました)

する事で動作を確認する事ができます。

# logger network connection error


実際に届いたメールはこんな感じになります。




2015年2月7日土曜日

rsyslog プロパティを操作する


今回は、rsyslogでテンプレートを定義する時に利用するプロパティについてです。
※評価は、CentOS6.6(x86_64) + rsyslog-8.7.0で行っています



利用できるプロパティには、hostnameやfromhostなどがあり、
 (参考)http://www.rsyslog.com/doc/v8-stable/configuration/properties.html

プロパティの書式は以下のようになっていています。
 (参考)http://www.rsyslog.com/doc/v8-stable/configuration/property_replacer.html
%property:fromChar:toChar:options%

通常は、propertyの部分だけを利用することが多いと思いますが、他の部分を操作することにより、ログの出力を色々と変化させる事ができます。

以下、2例ほどピックアップしてみます。


1.自動的に作成されるディレクトリを大文字とする

例えば、/var/log/<ホスト名>/<日付>.logのようにログを出力する際、ホスト名で作成されるディレクトリ部分を大文字にするには以下のようにuppercaseオプションを付与します。

$template   DEFAULT,  "/var/log/%FROMHOST:::uppercase%/$YEAR%%$MONTH%%$DAY%.log"
※逆に小文字にしたい場合は、lowercaseオプションを付与します


2.ログの必要な箇所だけ抽出する

fromCharとtoCharを指定すれば、シスログのどこからどこまでを抽出するかといった事が指定できます。
例えば、冗長な部分をカットした上で、RFC3339フォーマットっぽくログを出力させたい場合、

 (もともとの出力)
 2015-02-07T23:23:11.485286+09:00 rsyslog crond[10005]: (CRON) INFO (@reboot ・・・

 (冗長な部分をカットした出力)
 2015-02-07 23:23:11 rsyslog crond[10005]: (CRON) INFO (@reboot ・・・

以下のようなテンプレートを作成します(改行されてますが、1行で記述します)。
→先頭から10文字目までと、先頭から数えて12文字目から19文字目までを指定
$template RFC3339like, "%timestamp::10:date-rfc3339% %timestamp:12:19:date-rfc3339% %hostname% %syslogtag%%msg%\n"






2015年1月12日月曜日

rsyslog + MySQL 特定ホストだけMySQLへの出力を停止するには No.2

少し前に「rsyslog + MySQL 特定ホストだけMySQLへの出力を停止するには」という記事を書いているのですが、実現手段としてもう一つ追加します。
※評価は、CentOS6.6 + rsyslogのver8.6.0で行っています



ログを受信するポート + rulesetで除外する方法


リモートホスト側で、ログを転送するポートが自由に変更(例えばTCPの5140ポートなどに)できる場合には、以下のように設定することで、テンプレートSTOPSQLとして指定した先にのみログを出力し、その他のファイルやMySQLへの出力を止める事ができます。


input(type="imtcp" port="5140" ruleset="stopsql")

$template STOPSQL, "/var/log/%fromhost%/%$year%%$month%%$day%.log"

ruleset(name="stopsql"){
     action(type="omfile" dynaFile="STOPSQL")
}


(備考)
※詳細は以下のページで確認してください。
http://www.rsyslog.com/doc/v8-stable/concepts/multi_ruleset.html?highlight=ruleset

設定次第で、特定のホストのログだけを特別扱いするといった事が、より簡単に実現できると思います。

2015年1月6日火曜日

ソースの中のmanをインストール前に参照するには

ソースの中に含まれるmanをインストール前の事前確認として参照したい時ってありませんか?

そんな時の対応方法を2例ほど。
 →カレントディレクトリでpostfixのソースを展開後、anvil(8)を参照する例


1.manコマンドを使って参照
$ man postfix-2.12-20141228/man/man8/anvil.8

2.lessコマンドを使って参照
$ less -is postfix-2.12-20141228/man/man8/anvil.8

(備考)
より詳細な内容は、man(1)のDESCRIPTIONやENVIRONMENTなどで確認してください。

2015年1月4日日曜日

CentOS(RHEL)6 クラッシュダンプ用のメモリ割り当てを無効にする


クラッシュダンプを取得する必要がない + kexec-toolsのパッケージを導入していない(kdumpの機能を有効にしていない)にもかかわらず、クラッシュダンプ用にメモリの割り当て(消費)だけはされてしまうという状況を回避しようというのが今回の内容です。
※評価は、CentOS6.6(x86_64)でメモリ2GBを搭載したマシンで行っています


grub.confのkernel行にある”crashkernel=auto”の記述を削除する方法

(注意)
CentOS(RHEL)6系では、新しいkernelをインストールすると、必ず”crashkernel=auto”が付与されるようになっているので、新しいkernelをインストールした場合はその都度、削除をする必要があります
 ⇒ rpm -q --scripts kernel-<version> とするとその付与する処理が確認できます


/etc/init/kexec-disable.confを修正する方法

ファイルの中で”crashkernel=auto"をgrepしているのですが、/proc/cmdlineには実際に割り当てられたメモリの容量が入ってくるので、修正をしないと機能しません。
具体的には以下のように修正するか、その行自体を削除してしまっても良いと思います。

# diff -u /etc/init/kexec-disable.conf.orig /etc/init/kexec-disable.conf
--- /etc/init/kexec-disable.conf.orig     2015-01-02 23:02:11.067185577 +0900
+++ /etc/init/kexec-disable.conf  2015-01-02 23:06:03.607481618 +0900
@@ -8,7 +8,7 @@
 script
        if [ ! -x /sbin/kexec ] || ! chkconfig kdump 2>/dev/null ; then
-               grep -q "crashkernel=auto" /proc/cmdline && \
+               grep -q "crashkernel" /proc/cmdline && \
                echo -n "0" > /sys/kernel/kexec_crash_size 2>/dev/null
        fi
        exit 0
#

これで以下の条件にマッチすると、メモリの割り当てが無効になります。
・kexec-toolsパッケージがインストールされていない
・kexec-toolsパッケージがインストールされているが、自動起動がonになっていない

2014年12月1日月曜日

rsyslog 複数のポートで待ち受けるには

ログサーバとしてrsyslogを稼動させる時に、複数のポートで待ち受けしてみようというのが今回の内容です。
#検証は、CentOS6.6 + rsyslog-8.5.0で行っています


TCPの514ポートと5140ポートで待ちうけをする場合は、rsyslog.confを以下のように編集します。
module(load="imtcp")
input(type="imtcp" port="514")
input(type="imtcp" port="5140")

編集完了後にrsyslogをrestartし、状態を確認すると以下のようになります。
# netstat -antup | grep rsyslog
tcp        0      0 0.0.0.0:5140    0.0.0.0:*   LISTEN      1333/rsyslogd
tcp        0      0 0.0.0.0:514     0.0.0.0:*    LISTEN      1333/rsyslogd
#


※UDPでも同様の方法で設定できます。

2014年11月15日土曜日

rsyslog + MySQL 特定ホストだけMySQLへの出力を停止するには

以前、シスログをMySQLへ書き出す「rsyslog + MySQL」という記事を書きました。
今回はその記事に少し内容をプラスしてみます。

・ログサーバで、リモートから受け取ったログをファイルとして保存する以外に、MySQLにも保存している
・非常に大量のログを出力するホストがいるが、そのホストからのシスログだけMySQLには出力したいくない

といったシナリオを実現させる方法について2つピックアップしてみます。
※評価は、CentOS6.6 + rsyslogのver8.5.0で行っています


ファシリティで除外する方法


ログを送ってくる側でファシリティを指定できるのであれば、そのファシリティだけMySQLに出力されないようにするのがお手軽です。
*.*;local4.none     :ommysql:localhost,Syslog,rsyslog,PASSWORD


アクションで除外する方法


記述は面倒になりますが、以下のように記述する事で192.168.233.100と192.168.233.101から送られてくるシスログはMySQLへは出力されなくなります。
この場合のキモは”stop”の記述で、それ以降のログ出力の停止、つまりMySQLへのログ出力を停止する事ができます。

$template STOPSQL, "/var/log/%fromhost%/%$year%%$month%%$day%.log"

if \
  ( $fromhost-ip == '192.168.233.100' or \
   $fromhost-ip == '192.168.233.101' ) \
then {
        action(type="omfile"
          DirCreateMode="0750"
          DirGroup="logadmin"
          FileCreateMode="0640"
          FileOwner="logadmin"
          dynaFile="STOPSQL")
        stop
}

*.*     :ommysql:localhost,Syslog,rsyslog,PASSWORD

(備考)
actionとしてomfileを指定する場合、2つ注意することがあります。

1.DirCreateModeやFileCreateModeなどパーミッションに関連するパラメータは、全体に適用されるようにグローバルで指定してあったとしても、上記のように改めて指定する必要があります
2.さらに出力されるファイルの指定(上記だとdynaFileの行)は、一番最後に指定する必要があります

2014年11月5日水曜日

CentOS 7(RHEL7) でIPエイリアスの操作

CentOS7(RHEL7)になってネットワーク周りの設定もだいぶお作法が変わってきました。
今回はタイトルの通り、IPエイリアスの操作についてです。



一時的な(手動による)操作

※書式を確認するときは、ip addr helpとします
※IPアドレス、ネットマスク、インターフェース名はお使いの環境にあわせて適宜読みかえてください

<追加時>
# ip addr add 192.168.233.8/24 dev ens32

<削除時>
# ip addr del 192.168.233.8/24 dev ens32

※追加作業後にIPアドレスを確認すると、ens32のセカンダリアドレスとして登録されている事が確認できます。
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:7e:2f:54 brd ff:ff:ff:ff:ff:ff
    inet 192.168.233.7/24 brd 192.168.233.255 scope global ens32
       valid_lft forever preferred_lft forever
    inet 192.168.233.8/24 brd 192.168.233.255 scope global secondary ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe7e:2f54/64 scope link
       valid_lft forever preferred_lft forever
#


恒久的な操作

※上記1.の方法だと再起動すると追加した設定は消えてしまいます。
  恒久的に保存するにはいくつか方法がありますが、今回はnmtui-editコマンドを使ってみる事にします。
 →この操作で/etc/sysconfig/network-scripts/ifcfg-<interface名>に
   IPADDR1とPREFIX1として追加されます


1.nmtui-editコマンドを実行します。
 ※もし書式が崩れるようであれば、 LANG=C nmtui-edit と実行してください

2.IPエイリアスを追加するインターフェースを選択後、[TAB]キーで<Edit...>にカーソルを合わせEnterを押します。










3.次に現在インターフェースに設定されているIPアドレスの下にある<Add...>にカーソルを合わせてEnterを押します。






4.IPエイリアスの設定を追加します。
  追加後、画面右下の<OK>にカーソルを合わせてEnterを押します。







5.一番最初の画面に戻るので、画面右下の<Quit>にカーソルを合わせてEnterを押します。















以上で、OSを再起動しても設定したIPエイリアスが消える事はありません。