• ベストアンサー

Sendmailで送受信メールを数えたい

Solaris 7(Sparc) + Sendmail です。1日当たり何通のメールが 送受信されているか知りたいのですが: Jul 7 03:22:13 mail sendmail[12119]: DAA12119: ===以下略=== syslogの第6フィールド「DAA12119」の部分で、一意なものだけ の数が、送受信されたメールの数に一致するのでしょうか? また、第5(sendmail[12119]:)、第6フィールド(DAA12119) の意味の違いは何でしょうか? もしくは、他にメール数をカウントするより良い手段がある場合 ご教授願います(root権限使用可能)。

  • mod
  • お礼率68% (24/35)

質問者が選んだベストアンサー

  • ベストアンサー
noname#41381
noname#41381
回答No.3

>実は私もfrom/toから、社内間、社内->社外、社外->社内ごとに >集計したくてsyslogを見ていました。 >kanop_98さんは、そのような集計をやられていますか? > 自分はfromとtoそれぞれ集計してます。 なのでfromとtoを連携させた「社内間」と「社外→社内」の区別はしてません。 「どこから何通受信」「どこに何通送信」がわかれば ある程度は見えてくると思います。 で、貧弱な方法なのであまり参考にしてほしくないですが...^ ^;; 昔は単にgrep -cでカウントしてましたが、よけいな部分までカウントする事があったので、 今はperl使って集計してます。 syslogのfromとtoの部分のみをそれぞれ一時ファイルとして抽出し、 それらのファイルから内部ドメインとそれ以外(外部)の単語数を集計しているだけです。 キューIDやPIDは一切無視です。 perlのfrom,toの抽出部分は以下のような感じです。 ---------------------------------------------  open(OUT1,"> to.tmp");  open(OUT2,"> from.tmp");  open(IN,"< /var/log/syslog");  foreach $buffer (<IN>) {   ($tmp) = split(/,/,$buffer);   if ($tmp =~ /.*to=</) { print OUT1 "$tmp\n"; }   if ($tmp =~ /.*from=</) { print OUT2 "$tmp\n"; }  } --------------------------------------------- perlの集計部分は以下のような感じです。(to部分) ---------------------------------------------  open(IN,"< to.tmp");  open(OUT,"> syukei_to.txt");  foreach (<IN>) {   foreach $address (@address) {    $count{$address}+= /$address/g;   }  }  print OUT "naibu-1 = $count{$naibu-1}\n";  print OUT "naibu-2 = $count{$naibu-2}\n"; --------------------------------------------- @addressには参照するドメインの一覧($naibu-1="@hoge.com"とか)を入れておきます。 思いつきでつくったので、問題もあるでしょうし、もっとスマートな方法もあるかとは思います。 自分のこの貧弱スクリプトを見て専門家の方がコメントしてくれたらいいのですが...。

mod
質問者

お礼

ご丁寧にありがとうございました。Perlをつかった ことがなくて(^^); ちょっと調べていたためお礼のupが遅くなりました。 メアドのドメインより、社内外ごとのカウントが要求 されているのですが、Perlのスクリプトは参考になる ことがありました。ありがとうございました。

その他の回答 (2)

noname#41381
noname#41381
回答No.2

>過ぎ去った日のぶんがあるので、ログの内容もわかればいいのですが…。 > 実は自分所もsyslogから集計しているんです。 mailstats使えばいいのですが、fromとtoの宛先等を集計しているのでシェルが必要なのです。 シェルの内容は貧弱なので参考になりませんが...^ ^;; >第5(sendmail[12119]:)、第6フィールド(DAA12119) の意味の違いは何でしょうか? > [12119] これはPIDです。 DAA12119 これはキューファイルのIDです。 PIDはsendmailが子プロセスを生成するため、一通のメールでも変化します。 キューファイルは親プロセスのPIDを元に生成されるので、1通で一つのキューファイルのIDとなるはずです。 ちょっと自信なしですが、キューファイルのIDでまとめるといいのではないでしょうか。

mod
質問者

補足

ありがとうございます。 実は私もfrom/toから、社内間、社内->社外、社外->社内ごとに集計したくてsyslogを見ていました。が、「キューファイルのID」ごとにfrom/toを抽出しましたが、そこから先good ideaが出てきませんでした(^^); kanop_98さんは、そのような集計をやられていますか?

noname#41381
noname#41381
回答No.1

sendmail V8.7以降として話をします。 ログの見方はとりあえずおいておいて、sendmailには統計情報を生成する機能を持ってます。 プログラムは"mailstats"です。 統計をとるには、  1.sendmail.cfにて「O StatusFile=<統計ファイルのpath>」    通常は/etc/sendmail.stなどとします    CFを使っているなら「STAT_FILE_PATH=」で指定します。  2.touch /etc/sendmail.st であらかじめ統計ファイルを作成  3.sendmail再起動 これで統計がとれます。 内容はmailstatsで確認できます。 日ごとや週ごとに集計が必要であれば、この統計ファイル(/etc/sendmail.st)の内容を 定期的にクリアするようにcronを使えばいいでしょう。

mod
質問者

お礼

ありがとうございます。CFのデフォルト設定になっていたので、これまでの統計が見れました。cronを仕掛けて、今日からmailstatsコマンドの結果が利用できそうです。 あとは…、過ぎ去った日のぶんがあるので、ログの内容もわかればいいのですが…。

関連するQ&A

  • sendmailでローカルサーバ外にメールが送信できない

    Solaris10のデフォルトでインストールされている/usr/lib/sendmailで ローカルサーバ外にメールを送信することができません。 宛先をローカルサーバ内のアドレスにした場合、問題なくメールを 送信できるのですが、ローカルサーバ外のアドレスを指定すると、 メールが送信できません。 /var/log/syslog を確認したところ、以下のメッセージが 出力されていました。 --- Feb 4 12:12:02 ホスト名 sendmail[25774]: [ID 801593 mail.info] n1434WdZ025772: to=<外部アドレス>, delay=00:07:30, xdelay=00:07:30, mailer=esmtp, pri=120373, relay= mailhost, dsn=5.1.2, stat=Host unknown (Name server: mailhost: host not found) Feb 4 12:12:02 ホスト名 sendmail[25774]: [ID 801593 mail.info] n1434WdZ025772: n143C2dZ0257 74: DSN: Host unknown (Name server: mailhost: host not found) --- エラーではmailhostがないというようなメッセージがでています。 当サーバとほぼ同じネットワーク設定をしたSolaris9のサーバでは 問題なくメールが送信できていますが、Solaris10の場合はこのmailhostの 設定が必要なのでしょうか?

  • 非常にこまっています。

    非常に困っています。 助けていただければ幸いです。 特定のアドレスから来る以下条件のメールをサーバ上で削除したいのですが。何方か知恵を貸していただければ幸いです。 --条件---- サーバ:sendmail 対象アカウント数:200以上 到着時間:ばらばら OS:solaris8 一挙に消したいのでroot権限で/var/mailをさわるスクリプト等を動かしたいです。 教えていただければ非常にありがたいです。

  • sendmail 8.12.2の設定

    環境: Solaris 9(SPARC) sendmail 8.12.2 メールHUBにメールを送信するためsendmailの 設定をしております。 動作としては 自サーバからメールをhubに送信して、外に出して もらい、受信は一切行わないといった内容です。 メールが飛ぶとこまでの確認はしました。 /etc/hostsに以下をエントリ smtpサーバipアドレス #tab #tab smtp-server 次に /usr/lib/mail/cf/sendmail.mc を修正 -------------------------------------------- divert(0)dnl VERSIONID(`@(#)main.mc 1.5 (Sun) 08/10/00') OSTYPE(`solaris8')dnl define(`MAIL_SETTING_DIR',`/etc/mail/')dnl Dwホスト名 Dmドメイン名 define(`confDOMAIN_NAME',`$w.$m')dnl FEATURE(`accept_unresolvable_domains') define(`SMART_HOST',`smtp:smtp-server')dnl MASQUERADE_AS(`$m')dnl FEATURE(`masquerade_envelope')dnl DOMAIN(`solaris-generic')dnl MAILER(`local')dnl MAILER(`smtp')dnl -------------------------------------------- # make sendmail.cf # cp sendmail.cf /etc/mail # pkill -HUP sendmail # mailx メールアドレス subject aa bb . EOL この設定でメールは届きます。 ここからが質問なのですが、マスカレードを設定 したはずなのに、送信者のアドレスが root@ホスト名.ドメイン名 のままで届きます。 これを指定したアドレスにしたいのですがどのように 設定すればよろしいでしょうか? root@ホスト名.ドメイン名 → test@ドメイン名

  • sendmailからqmail:CGIから送れない

    こんばんわ。 sendmailコマンド置換えについてです。 OS:Fedora7 メールサーバー:qmailとdovecot vpopなど使ってます。 メールサーバーについては、 バーチャルでもローカルからは送受信出来てます。 cgiがユーザーさんがHPのcgiからメールを送って来ると、 内容を自動返信するような感じのcgiですが。 テストでやってみても。 ローカルの受信すら来ない状態です。 もちろん、自動返信で返っても来ません。 以下をしました。 chmod 0 /usr/lib/sendmail chmod 0 /usr/sbin/sendmail mv /usr/lib/sendmail /usr/lib/sendmail.bak mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail apacheのエラーは、 sh: /usr/sbin/sendmail: Permission denied, referer: http://www.hogehoge.com/cgi-bin/test.cgi Permission関係でしょうか? sendmailをls -lで調べると lrwxrwxrwx 1 root root 23 Jun 5 19:05 /usr/sbin/sendmail -> /var/qmail/bin/sendmail です。 その他調べる箇所ありますでしょうか? 後・・・ 私のサーバーでは、 newaliases とすると・・・ bash: /usr/bin/newaliases: Permission denied になります。 パーミッションは777のroot rootになってます。 宜しくお願いします。

  • sendmail サーバ使ってると/var/mail/root が肥大化して困ってます

    smtp サーバを、外部公開運用しています。 1年くらい使っているのですが、最近コンピュータの調子が悪いので、 よく見てみると、「/var/mail/root」というファイルが 1GB近くに肥大化してました。 このまま放置しておくと、ディスクがパンクする気配です。(危険(‥;)) このファイルって、削除しちゃっても構わないものなんでしょうか? (環境は、Solaris 2.7 でsendmail サーバ使ってます。) どなたか分かる方いらしゃいましたら、教えてくださいませ。

  • Solaris10でsendmail8.13.4を起動できません。

    先日Solari10でsendmail8.12.10がインストールできないと質問させていただいた者です。 sendmail8.13.4でインストールができたのですが、起動することができません。 メールサーバですので、最終的にはデーモンモードで起動したいと思っております。 Solaris10からSMFでサービスの「有効」、「無効」を設定できるようになったと聞いて、みようみまねで不必要なポートを閉じたのが原因かと思います。 思いつく情報を下記に示しますので、アドバイスいただけますでしょうか。(情報が足りないようでしたら、補足いたします) # svcs -a | grep sendmail offline 6月_24 svc:/network/smtp:sendmail # netstat -an | grep LISTEN *.22 *.* 0 0 49152 0 LISTEN *.23 *.* 0 0 49152 0 LISTEN *.21 *.* 0 0 49152 0 LISTEN *.22 *.* 0 0 49152 0 LISTEN *.23 *.* 0 0 49152 0 LISTEN *.21 *.* 0 0 49152 0 LISTEN # tail -f syslog (/usr/lib/sendmail -t時) Jun 27 12:02:53 HOSTNAME sendmail[6988]: [ID 702911 mail.crit] My unqualified host name (HOSTNAME) unknown; sleeping for retry ※HOSTNAMEは実際は違うホスト名です。

  • sendmailを使えるようにしたいです。

    sendmailで送受信できるようにしたいのですが、 リモートからの接続で拒否されてしまいます。 firewallとselinuxは無効にしています。 ほかにはどういった理由が考えられるでしょうか? [root@hogehoge mail]# ping 58.70.82.251 PING 58.70.82.251 (58.70.82.251) 56(84) bytes of data. 64 bytes from 58.70.82.251: icmp_seq=0 ttl=64 time=1.70 ms 64 bytes from 58.70.82.251: icmp_seq=1 ttl=64 time=0.827 ms 64 bytes from 58.70.82.251: icmp_seq=2 ttl=64 time=0.817 ms 64 bytes from 58.70.82.251: icmp_seq=3 ttl=64 time=0.835 ms 64 bytes from 58.70.82.251: icmp_seq=4 ttl=64 time=0.825 ms --- 58.70.82.251 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 0.817/1.001/1.705/0.353 ms, pipe 2 [root@hogehoge mail]# telnet 58.70.82.251 25 Trying 58.70.82.251... telnet: connect to address 58.70.82.251: Connection refused telnet: Unable to connect to remote host: Connection refused [root@hogehoge mail]# telnet localhost 25 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 hogehoge ESMTP Sendmail 8.13.1/8.13.1; Sat, 16 Sep 2006 05:39:54 +0900 quit 221 2.0.0 hogehoge closing connection Connection closed by foreign host. [root@hogehoge mail]#

  • メールサーバの構築方法.(初心者です.)

    こんにちは.自分は現在研究室でメールサーバの構築をしようとしています. しかし,いくつかの点でうまくいきません. OSは, Red Hat Linux 7.1Jです.MTAとしてsendmail 8.11.2を用いています. popにはqpopperの使用を考えています. その症状は,root権限に限りメールの送受信が可能です. sendmail.defを Linux関係のURLや書籍を参考にしているのですが, うまくいかないのです… *.def を書く際に気をつけなければならない点があったら教えていただきたいのです. なお,環境は以下のとおりです. OS:Red Hat Linux7.1J MTA: sendmail 8. 11.2 メモリ:256MB HDD:20GB 以上,宜しく御願いします.

  • sendmailの動作に関して

    現在、AIX5.1、sendmail8.11.6p2でメールシステムを 構築しています。 今まで普通に動いていたのですが、ここ最近、/var/spool/mqueueがいっぱいになって、メールが送受信できない事態が起こっています。 ログを見ると、ある人からメールが届くのですが、何らかの理由で受信できない場合、Mailer daemonが返信しようとします。しかし、data Format errorのため送信できないようです。このため、定期的にMailer daemonがメールを送信をしようと試み、そのたびに、失敗しています。同時に、新しいメッセージIDが付いたメールが/var/spool/mqueueに溜まっていってしまいます。 ログはこんな感じです。定期的に以下のような内容が出力されます(メッセージIDは異なる) Sep 20 09:38:55 dns1 sendmail[114638]: j8K0aDb114638: to=<foo@hogehoge.co.jp>, delay=00:00:02, xdelay=00:00:00, mailer=smtp, pri=4622146, r elay=***.*****co.jp. [123.456.789.1011], dsn=5.6.0, stat=Data format error Sep 20 09:38:55 dns1 sendmail[114638]: j8K0aDb114638: j8K0aDc114638: return to sender: Data format error Sep 20 09:39:06 dns1 sendmail[114638]: j8K0aDb114638: Losing ./qfj8K0aDb114638: savemail panic Sep 20 09:39:06 dns1 sendmail[114638]: j8K0aDb114638: SYSERR(root): savemail: cannot save rejected email anywhere: No such file or directory このように、メールが返信できないと、次々に新しいメッセージIDをもったキューを作り出すのは、仕様なのでしょうか?それとも、バグなのでしょうか? また、Mailqを見ても、キューはないのに、/var/spool/mqueueにはメッセージがたくさん残っているように見えるのですが、これは、正常なsendmailの動作の結果できたごみファイルで、できるのが普通なのでしょうか?

  • sendmailメールの一斉配信に失敗します

    業務系webアプリの運用担当者です。 システムの機能としてメールの一斉配信ができるのですが、 webアプリからの一斉配信に部分的に失敗します。 300通の配信指定に対し、実際には50通前後で配信が中断されていました。 (前後、というのは何度か配信を実行し50通程度なら一斉配信できたという意味です) ログレベルが低く細かい解析はできていないのですが、 syslogをみると配送できていたアドレスのみ「Sent OK」で記述されていました。 実際の負荷量によるとは思うのですが、 想定しているのは300通程度の一斉配信です。 宛先MTAはほぼばらばらになります。個人向けフリーアドレスも相当数あります。 配信にたとえ数十分かかっても、ちゃんと送信できればいいのです。 現在の設定では、子プロセスを一切生成しないようになっています。 そこで、sendmail.cf内下記を変更することで解決を試みようと 考えました。 ・変更前現在の値 #O ForkEachJob=False #O MaxDaemonChildren=0 ・変更後の想定値 O ForkEachJob=True O MaxDaemonChildren=20 私の解釈では、この変更によりキューが発生した際には子プロセスを最大20個 まで生成し分散処理され、300通のメールが無事配送されることを想定しています。 マシンスペックは大まかに、 ハードウェアはSunFire、OSはSolaris9、 CPU:1GHz、Mem:1GB となっています。 what コマンドを使用したsendmailバージョン表示が下記です。 # /usr/ccs/bin/what /usr/lib/sendmail | grep -i version $Id: version.c,v 8.163.2.8 2006/07/26 17:24:02 ca Exp $ システムの本番環境のために試しにいろいろ変えてみるというのはやりづらく、 運用実績のある方からコメントを頂戴できますと幸甚です。 どなたかこのあたりのチューニングを経験された方はいらっしゃいますでしょうか。 宜しくお願い致します。