サーバ構築

1記事
サムネイル

muninを使ったサーバ監視+Apacheの追加監視とWordPressの共存

安定したサーバの運用には、サーバの監視が欠かせません。とはいうものの、24時間サーバの様子を見続けることなど不可能なので、弊社では「munin」「awsの管理画面」「pingdom」の3つを使ってサーバの監視を行っています。 munin - サーバやネットワークの監視ツール。オープンソースである。 awsの管理画面 - 様々なリソースの状況を確認できる。 pingdom - 世界各地のデータセンタから死活確認をするサービス。 本記事ではmuninを使ってApacheを監視する方法、および、Wordpress等を運用している場合に発生する注意事項を紹介します。 前提条件 本記事は以下の環境にて動作確認を行っております。 Amazon Web Services の AmazonLinuxで、Apache2.4をインストール済 Muninのインストール Muninは以下の手順でインストールできます。 sudo yum install munin munin-node #インストール sudo chkconfig munin-node on #サービスを自動起動するように設定 sudo service munin-node start #サービスを起動 sudo htpasswd -c /etc/munin/munin-htpasswd admin #パスワードを設定します これで5分程度経過すると、/munin/にサーバの監視結果が表示されます。 監視結果が存在しない場合は以下のような画面が表示されます。(ディレクトリインデックス(=ディレクトリ内のファイル一覧表示)を許可している場合のみ) 監視結果が生成されると以下のような画面が表示されます。 これでmuninを使えるようになりましたが、先程設定したパスワードが無視され、誰でも監視結果が見える状態になっています。これはセキュリティー上の問題があります。(攻撃者に弱点がバレてしまいます) Apacheの再起動 Apacheを再起動するとMuninのログイン制限が有効化されます。これでmuninを使った基本的なサーバ監視の基本的な設定は完了です。 sudo service httpd restart 監視項目の追加 基本的なセットアップだけでも、サーバのかなり詳細情報が取れるようになりました。ディスク、ネットワーク、CPUなどOSレベルで気にするべき多くの項目は網羅されています。 バージョン2.0.20では、デフォルトで38の監視項目が有効化されています(1つの項目の中でも10程度の値をモニタリングしているものもあります)が、全体では232の監視項目が準備されています。 全て追加してしまえば良いように思うかもしれませんが、オススメしません。そんなことをすると、監視のための負荷が発生したり、監視結果の保存スペースが余分に必要になったり、そもそも、muninの画面に不要な項目が羅列され、目的の項目を探しづらくなってしまいます。 デフォルトで有効化されている監視項目 ls /etc/munin/plugins/ cpu diskstats fw_packets interrupts memory ntp_kernel_pll_freq ntp_states processes sendmail_mailstats threads vmstat df entropy if_err_eth0 irqstats netstat ntp_kernel_pll_off open_files proc_pri sendmail_mailtraffic uptime df_inode forks if_eth0 load ntp_kernel_err ntp_offset open_inodes sendmail_mailqueue swap users リンクするだけで直ぐに使える監視項目 ls /usr/share/munin/plugins/ acpi diskstat_ ip_ nfs4_client postgres_checkpoints snmp__cpuload snort_traffic amavis diskstats ipac-ng nfs_client postgres_connections_ snmp__df spamstats apache_accesses ejabberd_ ipmi_ nfsd postgres_connections_db snmp__df_ram squeezebox_ apache_processes entropy ipmi_sensor_ nfsd4 postgres_locks_ snmp__fc_if_ squid_cache apache_volume exim_mailqueue ircu nginx_request postgres_oldest_prepared_xact_ snmp__fc_if_err_ squid_icp apc_envunit_ exim_mailqueue_alt irqstats nginx_status postgres_prepared_xacts_ snmp__if_ squid_objectsize apc_nis exim_mailstats jmx_tomcat_dbpools nomadix_users_ postgres_querylength_ snmp__if_err_ squid_requests apt fail2ban load ntp_kernel_err postgres_scans_ snmp__if_multi squid_traffic apt_all files_ loggrep ntp_kernel_pll_freq postgres_size_ snmp__load surfboard asterisk_channels foldingathome lpar_cpu ntp_kernel_pll_off postgres_streaming_ snmp__memory swap asterisk_channelstypes foldingathome_rank lpstat ntp_offset postgres_transactions_ snmp__netapp_diskusage_ tcp asterisk_codecs foldingathome_wu mailman ntp_states postgres_tuples_ snmp__netapp_inodeusage_ threads asterisk_meetme forks mailscanner nut_misc postgres_users snmp__netstat tomcat_access asterisk_meetmeusers freeradius_acct mbmon_ nutups_ postgres_xlog snmp__print_pages tomcat_jvm asterisk_sipchannels freeradius_auth memcached_ nut_volts proc snmp__print_supplies tomcat_threads asterisk_sippeers freeradius_proxy_acct meminfo nvidia_ processes snmp__processes tomcat_volume asterisk_voicemail freeradius_proxy_auth memory open_files proc_pri snmp__rdp_users uptime bind9 fw_conntrack mhttping open_inodes proxy_plugin snmp__sensors_fsc_bx_fan users bind9_rndc fw_forwarded_local multiping openvpn ps_ snmp__sensors_fsc_bx_temp varnish_ bonding_err_ fw_packets multips perdition psu_ snmp__sensors_fsc_fan vlan_ buddyinfo haproxy_ multips_memory pgbouncer_connections qmailqstat snmp__sensors_fsc_temp vlan_inetuse_ cmc_tc_sensor_ haproxy_ng munin_stats pgbouncer_requests qmailscan snmp__sensors_mbm_fan vlan_linkuse_ courier_ hddtemp munin_update ping_ qmailscan-simple snmp__sensors_mbm_temp vmstat courier_mta_mailqueue hddtemp2 mysql_ plugin.sh quota_usage_ snmp__sensors_mbm_volt vserver_cpu_ courier_mta_mailstats hddtempd mysql_bytes plugins.history samba snmp__swap vserver_loadavg courier_mta_mailvolume hddtemp_smartctl mysql_innodb pm3users_ selinux_avcstat snmp__uptime vserver_resources cps_ hp2000_ mysql_isam_space_ pop_stats sendmail_mailqueue snmp__users yum cpu http_loadtime mysql_queries port_ sendmail_mailstats snmp__winload zimbra_ cpuspeed if_ mysql_slowqueries postfix_mailqueue sendmail_mailtraffic snmp__winmem cupsys_pages if_err_ mysql_threads postfix_mailstats sensors_ snort_alerts df ifx_concurrent_sessions_ named postfix_mailvolume slapd_ snort_bytes_pkt df_abs interrupts netopia postgres_autovacuum slapd_bdb_cache_ snort_drop_rate df_inode iostat netstat postgres_bgwriter slony_lag_ snort_pattern_match digitemp_ iostat_ios netstat_multi postgres_cache_ smart_ snort_pkts Apacheに対する監視項目を追加 では、Apacheに関する監視項目を追加してみましょう。 以下の3ステップで設定できます。(Wordpressがなければ2ステップの場合が多い) Apacheの拡張ステータス表示を有効化する .htaccessが悪さをしている場合は記述を修正する(必要な場合のみ) muninに監視対象を追加する Apacheの拡張ステータス表示を有効化 /etc/httpd/conf/httpd.conf の末尾に以下の設定を追加する。/server-statusにアクセスしたとき、server-statusハンドラで処理するように指定している。また、外部からアクセスできると、セキュリティー上問題があるので、ローカルホストからのアクセスしか許可していない。 <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from localhost </Location> Allow from のlocalhostはmuninからのアクセスにつかう。 これで、/server-status にアクセスしてサーバステータスが取得できれば問題ない。 外部からのアクセスを許可していないので、 wget http://localhost/server-status などとして、アクセスできるか確認すること。 WordpressなどのCMSが入っている場合、それらの.htaccessが悪さをしている場合があるので修正する。 .htaccessを修正する(必要な場合のみ) /var/www/html/.htaccessに、URLのリライト設定がされていて、その設定が悪さをしている場合がある。「RewriteCond %{REQUEST_URI} !=/server-status」を追加することで、サーバのステータス取得URLをリライト対象外とする。 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/server-status RewriteRule . /index.php [L] </IfModule> muninに監視対象を追加する シンボリックリンクを貼れば良い。以下のコピペでApacheに関する監視項目を追加できる。 sudo ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses sudo ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes sudo ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume シンボリックリンクを追加したあとは必ず、munin-nodeをリスタートすること。 service munin-node restart 設定がうまくいっていれば、apacheの項目が追加され、グラフが描画され始めます。 まとめ muninを使えば手軽にサーバ監視を開始できます。今回の例ではApacheについて追加監視の指定を行いましたが、必要に応じて適切なプラグインを追加し、実用的なサーバ監視体制を構築しましょう。