【シェルスクリプト】apacheのrotatelogsとシェルスクリプトでログ管理をする【運用】

お疲れ様です。
rotatelogsでapacheのログを出力している環境でログを管理する必要があったので、忘備録として残しておきます。

背景

CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_log.%Y%m%d%H 14400 540" combined  env=!no_log
ErrorLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/error_log.%Y%m%d 86400 540"

apacheに標準でついてくるrotatelogsでログが世代管理されている前提でですね、
2週間経過したログは削除、1日経過したログは圧縮するスクリプトを作ってcronに登録してみます。

スクリプトの作成

vi /usr/local/bin/apache_accesslog_compress.sh
====================================================================
#!/bin/sh
#ディレクトリを移動する
cd /usr/local/apache2/logs
#14日経過したログを削除する
find ./ -name 'access_log.*' -mtime +13 -daystart -exec rm {} \;
#1日経過したログを圧縮する
find ./ -name 'access_log.*' -mtime +0 -daystart  -exec gzip {} \;
====================================================================

findコマンドの-daystartは
コマンドを実行した日の00:00を-mtimeの基準とするオプションです。

cronへの登録

crontab -e
=======================================================
00 04 * * * /usr/local/bin/apache_accesslog_compress.sh
=======================================================

古い MySQL インストール方法

こんにちは。
古いバージョンの MySQL をインストールする際に少し躓いたので備忘録を残しておきます。

手順

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar

yum localinstall mysql-community-server-5.7.24-1.el7.x86_64.rpm \
mysql-community-client-5.7.24-1.el7.x86_64.rpm \
mysql-community-common-5.7.24-1.el7.x86_64.rpm \
mysql-community-devel-5.7.24-1.el7.x86_64.rpm \
mysql-community-libs-5.7.24-1.el7.x86_64.rpm \
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm

【tips】コメントアウトを省いて設定ファイルを確認する方法

お疲れ様です。
最近サーバの構築チームに移動になりました。
表題の通りです。

コメントアウトを省いて設定ファイルを確認する

grep -v -e '^\s*#' -e '^\s*$' 【設定ファイル】

例題

↓こんな感じです。

[root@ansible-dev etc]# grep -v -e '^\s*#' -e '^\s*$' /etc/ansible/ansible.cfg
[defaults]
roles_path    = /etc/ansible/roles:/usr/share/ansible/roles
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

MySQL が停止して困った話

こんにちは。
メモリが枯渇して MySQL が起動しなくなったので、SWAP を追加したお話です。

背景

最近、メモリ不足で MySQL が勝手に停止する事象が発生してました。
取り急ぎ、下記のようなスクリプトを cron に登録してたのですが、さらに SWAP 領域を作成しておきます。

#!/bin/bash
ProcessName=mysqld
count=`ps aux | grep $ProcessName | grep -v grep | wc -l`
if [ $count = 0 ]; then
sudo systemctl restart $ProcessName
echo "$(date)_$ProcessName is dead" >> /var/log/mysqld/statu_log.txt
else
echo "$(date)_$ProcessName is alive" >> /var/log/mysqld/statu_log.txt
fi

dd if=/dev/zero of=/swap.img bs=1M count=500
chmod 600 /swap.img
mkswap /swap.img
swapon /swap.img
cp -p /etc/fstab /etc/fstab_20181118
vim /etc/fstab
================================
/swap.img swap swap defaults 0 0
================================
systemctl status mysqld

LPIC202試験を受験した話

こんにちは。
皆さんお元気ですか。

というわけで、無事LPIC202試験に合格しました。
これでようやくLPIC2を取得したことになります。
毎度のことですが試験のレポです。

勉強

前回、LPIC201に合格したのが8月、、だいたい2か月くらいの勉強期間でした。
LPIC202試験になると色々なミドルウェアの設定ファイルを覚えないといけないので大変でしたね…
スピードマスター、小豆本、ping-tをフル活用しました。

試験内容

主に出題されたのはsambaとDovecotとSieveでしたね。
全体の1割くらいの問題が、スピードマスター、小豆本、ping-tのどれにも入っていない問題でした。
多少LDAPも出題されたかな。
nginx系の問題はあまり出題されませんでした。

結果は550/800だったので結構ギリギリでした。

まとめ

これからLPIC202試験を受験される方は、ひたすらping-tで模擬試験を受験されることをオススメします。
特に時間のない方はsambaに関して重点的に勉強すればいいかと思われます。

それではLPIC3を取得するために304試験の勉強を始めますね。

Let’s Encrypt で証明書を取得する

こんにちは。
急に寒くなってきましたね。
ところで Let’s Encrypt でサイトを SSL化しました。
その際の備忘録になります。

certbotのインストール

epel から certbot のパッケージを落とします。

yum install epel-release
yum install certbot

証明書の取得

certbot certonly --webroot \
-w 【ドキュメントルート】 \
-d 【ドメイン名】 \
-m 【メールアドレス】 \
--agree-tos -n

※ 下記ディレクトリに証明書が生成されます。

# サーバ証明書
/etc/letsencrypt/live/【ドメイン名】/cert.pem
# 秘密鍵
/etc/letsencrypt/live/【ドメイン名】/privkey.pem
# 中間証明書
/etc/letsencrypt/live/【ドメイン名】/chain.pem

あとは、WEBサーバに設定すればOK

<VirtualHost *:443>
   ServerAdmin n41210guitar@gmail.com
   ServerName fingerease.work
   DocumentRoot "/var/www/vhosts/fingerease.work/public_html"
   DirectoryIndex wordpress index.php index.html index.xml
   <Directory /var/www/vhosts/fingerease.work/public_html>
           Options FollowSymLinks
           AllowOverride all
   </Directory>
   
   SSLEngine on
   SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
   SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
   SSLHonorCipherOrder     off

   SSLCertificateFile /etc/letsencrypt/live/fingerease.work/cert.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/fingerease.work/privkey.pem
   SSLCertificateChainFile /etc/letsencrypt/live/fingerease.work/chain.pem

   CustomLog "/var/log/httpd/fingerease.work-ssl-access_log" combined
   ErrorLog  "/var/log/httpd/fingerease.work-ssl-error_log"
</VirtualHost>