カテゴリー: tips information and links
CATEGORY ARCHIVE
WordPressを運用しているとどこにアクセスが多いか気になる。一方、スパムが多い。 それで、アクセスログ解析を行いたいが、関係ないアクセスログも多い。 そこで、アクセスログの削減を行うとともに、アクセスのトップ10をメール通知する様にした。
前提条件
- apacheをweb serverとして使っている
- lan内メールサーバーが構築済み
- (raspberry pi OS : ubuntuやdebianでも同じと思う)
ログ削減
lan内からのアクセスやcssファイル等の読み込みはログに残さないようにする。
/etc/apache2/sites-enabled/000-default.conf 及び /etc/apache2/sites-enabled/default-ssl.conf のCustomlog 部分を以下の様に編集する。
# CustomLog ${APACHE_LOG_DIR}/access.log combined
SetEnvIf Remote_Addr 127.0.0.1 nolog
SetEnvIf Remote_Addr 192.168.0. nolog
SetEnvIf Remote_Addr 192.168.2. nolog
SetEnvIf Request_URI "\.(gif|jpg|png|css|js|ico)$" nolog
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog
もし、JPG等大文字のものがログに現れた場合は、SetEnvIF部分をSetEnvIfNoCaseに換える。
注:スペルミスがありましたので修正しました(no_log => nolog) 2021/03/20
再起動
sudo systemctl restart apache2
top10作成及びメール文作成用のシェルの準備
以下のシェルスクリプト(mytools/webtop10.sh)を作成
#!/bin/bash
echo from: wp_server@ktanimoto.net
echo to: wp_server@ktanimoto.net
echo subject: raspi web server accecc top10
echo Content-Type: text/plain;charset="UTF-8"
echo
echo ------ access IP top 10 ----------
cat /var/log/apache2/access.log |cut -f 1 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
echo ----- access page top10 -----------
cat /var/log/apache2/access.log |cut -f 7 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
echo ------- actual access top 10 -----------
cat /var/log/apache2/access.log |grep 200 |cut -f 7 -d ' ' | sort |uniq -c|sort -nr|head -10
echo
cronの設定
rootが所有者になる様にしてcron設定ファイルを作成する(webtop10とここではする)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
50 7 * * * pi /home/pi/mytools/webtop10.sh | sendmail -i -t
あるraspberry piにpostfixとdovecotで簡易的なメールサーバーを構築した。 それで、別のraspberry piマシンからも定期連絡等のメールを送れるようにする。
手法
メールを送るだけなので軽量な方法で行う。 簡単な調査だと、ssmtpを使うのが簡単そうであり、これをインストールして実現する。
インストールと設定
メールサーバーとポート番号の指定を、sudo nano /etc/ssmtp/ssmtp.conf にて行う
mailhub=192.168.0.232:587
メール送信テスト
以下のテスト用ファイルを作成する。 testmail.txt とする。
from: pi@localhost
to: receiver_name@mydomain
subject: hello-test-from-ssmtp
Content-Type: text/plain;charset="UTF-8"
this is test mail by ssmtp
次のコマンドでテストする。
cat testmail.txt | sendmail -i -t
メーラーで受信を確認。受信できていた。
あとは、シェル作成とcron設定
(2021/03/19 追記)
以下のファイル myhealth.sh を作成する
echo from: pi@localhost
echo to: wp_server@ktanimoto.net
echo subject: dns vpn daily report
echo Content-Type: text/plain;charset="UTF-8"
echo
date
echo
echo ------ memory usage -------
free -h
echo
echo ----- device usage --------
df -h
echo
/etc/cron.d/myhealth をsudo nanoで作成する(rootが所有者になるようにする)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
15 */12 * * * pi bash /home/pi/mytools/myhealth.sh | sendmail -i -t
最後の行でbashの後に空白がなかったので追加(2021/3/20)
raspberry piでサーバー運用しているので稼働状況をメールで自動的にメールで送らせるようにする。
前提条件
OS : raspberry pi OS (buster)
mail server: postfix+dovecot (これでないといけないというわけではない)
範囲 : LAN内でのみ使用 (securityは考えない)
方針
- LAN内でのみ使用
- postfixでサポートのsendmailインターフェースを使う
(mutt でトライしたがうまく動かせず断念) - 簡単のためシェルを使う
- メールのsubjectにはアルファベットを使う。
- 計測するデータは、cpuの温度、メモリー使用状況、SSD使用容量、smart状況
メール送信用コマンド
mytools/health.sh | sendmail -i -t
mytools/health.shが計測用シェル兼sendmailへのインターフェース部
シェルの中身
#!/bin/bash
echo from: sender_name@domain_name
echo to: receiver_name@domain_name
echo subject: raspi server status report
echo Content-Type: text/plain;charset="UTF-8"
echo
echo ------ date and time ----------
date
echo
echo ----- cpu temparature -----------
vcgencmd measure_temp
echo
echo ------- memory usage -----------
free -h
echo
echo -------- device usage ---------
df -h
echo
echo ------- SSD smart data ----------
smartctl -d sat -A /dev/sda
sender_name, receiver_name, domain_name, /dev/sdaは実際の値に調整する。
ユーザー追加
sudo useradd sender_name -s /sbin/nologin
sudo passwd sender_name
sudo mkdir /home/sender_name
sudo chown sender_name:sender_name /home/sender_name
下2行の必要性がよくわからないが、/var/log/mail.errに出てくるエラーを消すためにいろいろしていて、その結果上記の様にしたところメール送信ができたため。
cronの設定
次の様な内容のファイル(例えばhealthcheck)を作成し、/etc/cron.dに配置する。
なお、オーナーをrootにしておかないとcronがエラーになったのでrootにする。
超参考となったサイト:https://www.server-memo.net/tips/etc-crontab.html
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
HOME=/home/pi
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,$
# | | | | |
# * * * * * user-name command to be executed
7 10 * * * root /home/pi/mytools/health.sh | sendmail -i -t
7 22 * * * root /home/pi/mytools/health.sh | sendmail -i -t
sudoがcronの中で使おうとすると、"TTY onknown"となったのでsudoを使わないようにするsmartctlをcronの中で使えるようにする。従ってユーザーもrootとする。
最後は、メーラ側の設定を行いおしまい
pip3管理のパッケージ一括更新
pip3 list -o |grep wheel | awk ‘{print $1}’ |xargs pip3 install ?user -U
'https://qiita.com/Klein/items/a3110d20532ba9f9057bを参考にした
ubuntuでのm2.SSD nvmeタイプの温度表示
準備
$ sudo apt install nvme-cli
m2.ssd nvme1の一覧表示
$ sudo nvme list
温度表示
$ sudo nvme smart-log /dev/nvme0n1
例
temperature : 42 C
環境変数$PATH に、同じものを何度も登録してしまったり、いらなくなったものが残って
いたりすることがあり、困っていたところ下記記事を発見。
試してみたところ、無事、いらないpathを削除できたので、記録として残す。
http://qiita.com/ironsand/items/10e28d7589298090ec23
sudo nano ~/.bashrc
path_append () { path_remove $1; export PATH=”$PATH:$1″; }
path_prepend () { path_remove $1; export PATH=”$1:$PATH”; }
path_remove () { export PATH=echo -n $PATH | awk -v RS=: -v ORS=: ‘$0 != “‘$1′” ‘ | sed ‘s/:$//’
; }
$ . ~/.bashrc