https://go.sawanoboly.net/2019/11/22/wp_redis_disable_metrics/
カテゴリー: メモ
AMIMOTO で PHP 7.2 を利用する
AMIMOTO で PHP 7.2 を利用するには、以下のコマンドを実行してください。
Chef レシピを最新のものに更新する
$ sudo git -C /opt/local/chef-repo/cookbooks/amimoto/ pull origin 2016.01
remote: Counting objects: 31, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 31 (delta 24), reused 26 (delta 24), pack-reused 4
Unpacking objects: 100% (31/31), done.
From git://github.com/Launch-with-1-Click/lw1-amimoto
* branch 2016.01 -> FETCH_HEAD
3ce41b9..af15013 2016.01 -> origin/2016.01
Updating 3ce41b9..af15013
Fast-forward
attributes/03_php.rb | 17 +++++++++++++++++
attributes/yum_repo.rb | 3 +++
recipes/php.rb | 7 +++++++
recipes/redis.rb | 11 ++++++++---
recipes/repos.rb | 2 +-
templates/amazon/yum/remi.repo.erb | 29 +++++++++++++++++++++++++++++
templates/default/yum/remi.repo.erb | 29 +++++++++++++++++++++++++++++
7 files changed, 94 insertions(+), 4 deletions(-)
Chef レシピに与えるパラメータを保存している /opt/local/amimoto.json を編集する
$ TMP_JSON=$(mktemp)
$ jq -s '.[1] * .[0]' <(echo '{"phpfpm":{"version":"72"}}') <(sudo cat /opt/local/amimoto.json) > ${TMP_JSON}
$ sudo mv -f ${TMP_JSON} /opt/local/amimoto.json
※ 7.2 以外(5.6, 7.0, 7.1)が使用したい場合は、2行目の “version”:”72″ を変更してください。
最後に以下のコマンドを実行します。
$ sudo /opt/local/provision
$ sudo service php-fpm restart
確認
$ php -v
PHP 7.2.1 (cli) (built: Jan 3 2018 09:08:32) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.2.1, Copyright (c) 1999-2017, by Zend Technologies
AMIMOTO で redis object cache を使用する
AMIMOTO で redis object cache を使用するには、以下の3ステップの作業が必要となります。
- redis をインストールする
- WordPress プラグイン Redis Object Cache をインストールして有効化する
- Redis Object Cache に関する不具合を修復するプラグインをインストールする
では、順番にやり方を説明しましょう。
redis をインストールする
これは、それほど難しくありません。
まず、SSH接続してから /opt/local/amimoto.json を編集してください。
以下のコマンドで対応可能です。
$ TMP_JSON=$(mktemp)
$ jq -s '.[1] * .[0]' <(echo '{"redis":true}') <(sudo cat /opt/local/amimoto.json) > ${TMP_JSON}
$ sudo mv -f ${TMP_JSON} /opt/local/amimoto.json
次に以下のコマンドを実行します。
$ sudo /opt/local/provision
Redis が起動しているかどうかは、以下のコマンドで確認できます。
$ sudo service redis status
Redis Object Cache をインストールして有効化する
まず、wp-config.php に以下のコードを追加しておきます。
/** Redis Cache Settings **/
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_MAXTTL', 3600);
define('WP_CACHE_KEY_SALT', DB_NAME);
設定する各定数の意味は、プラグインの説明読んでください。
プラグインのインストールを wp-cli 使ってやるなら、以下の通り
$ wp plugin install --activate redis-cache
$ wp redis enable
$ wp redis sttus
Status: Connected
Client: PECL Extension (v3.1.6)
Redis Object Cache に関する不具合を修復するプラグインをインストールする
ファイル redis-cache-fix.php を取ってきて、wp-content/mu-plugins/ ディレクトリに保存してください。
ターミナルでやるなら以下の通り
$ wget https://gist.githubusercontent.com/wokamoto/5c0c8a19a6dbd08e4121aa05d238543c/raw/464d418bcc7f9686852cdc3c0db6d6316278d6ed/redis-cache-fix.php
$ mkdir /path/to/wordpress/wp-content/mu-plugins
$ mv redis-cache-fix.php /path/to/wordpress/wp-content/mu-plugins/
こんな感じで良いかなと
[AWS] AWS Certificate Manager が Tokyo リージョンにやってきた!
AWS Certificate Manager が Tokyo リージョンでも使えるようになりました。
AWS Certificate Manager now available in more regions
以前、SES を使って ACM の承認メール受信する方法を書いてますので、それ参考にしてくださいねー。
S3 で SES 受信するためのバケットポリシーサンプル
{ | |
"Version": "2008-10-17", | |
"Statement": [ | |
{ | |
"Sid": "GiveSESPermissionToWriteEmail", | |
"Effect": "Allow", | |
"Principal": { | |
"Service": [ | |
"ses.amazonaws.com" | |
] | |
}, | |
"Action": [ | |
"s3:PutObject" | |
], | |
"Resource": "arn:aws:s3:::BUCKET-NAME/*", | |
"Condition": { | |
"StringEquals": { | |
"aws:Referer": "ACCOUNT-ID-WITHOUT-HYPHENS" | |
} | |
} | |
} | |
] | |
} |
[AWS] mailq を監視して CloudWatch のカスタムメトリクスに送信
Web サーバにバックドア仕掛けられて spam 送信の踏み台にされていないかを確認するために mailq の値をカスタムメトリクスに定期的に送信してCloudWatch で検出しておくと、ある日突然 AWS から「Your Amazon EC2 Abuse Report」ってメールが来ることが無くなると思うよ。
#!/bin/sh
# EC2 のインスタンス ID を取得
instanceid=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
# region を取得
az=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
_length=$(echo $((${#az} - 1)))
region=$(echo ${az} | cut -c 1-${_length})
namespace="System/Linux"
# mailq
mailq=$(mailq | grep 'Total requests' | awk '{print $3}')
aws cloudwatch put-metric-data \
--region ${region} \
--namespace ${namespace} \
--dimensions InstanceId=${instanceid} \
--unit Count \
--metric-name "MailQueu" \
--value "$mailq"
[AWS] RDS のパラメータグループに設定されてる値を CSV で取得
jq 使えば csv 化は簡単
aws rds describe-db-parameters –db-parameter-group-name {PARAMETER-GROUP-NAME-HERE} | |
| jq -r '.Parameters[] | "\(.ParameterName), \(.ParameterValue)"' \ | |
> rds_parameters.csv |
[aws-cli] EC2スケールアップした時にELB配下だったら、一度外して再度参加させるやつ
スケールアップするためにインスタンス停止したら、ELBに再度参加させないと、いつまでも Out of Service のことってあるよね…
#!/bin/sh | |
INSTANCE_ID="${1}" | |
INSTANCE_TYPE="${2}" | |
# 指定されたインスタンスタイプが現在のものと同じだったら何もしない | |
CURRENT_INSTANCE_TYPE=`aws ec2 describe-instances –instance-ids ${INSTANCE_ID} | jq -r '.Reservations[].Instances[].InstanceType'` | |
if [ "${CURRENT_INSTANCE_TYPE}" = "${INSTANCE_TYPE}" ]; then | |
echo "current instance type : ${CURRENT_INSTANCE_TYPE}" | |
exit 0 | |
fi | |
# ELB 配下かどうか確認 | |
ELB_NAME='' | |
ELBS=`aws elb describe-load-balancers | jq -r ".LoadBalancerDescriptions[].LoadBalancerName"` | |
for ELB in ${ELBS}; do | |
ELB_INSTANCE_IDS=`aws elb describe-instance-health –load-balancer-name ${ELB} | jq -r ".InstanceStates[].InstanceId"` | |
for ELB_INSTANCE_ID in ${ELB_INSTANCE_IDS}; do | |
if [ "${ELB_INSTANCE_ID}" = "${INSTANCE_ID}" ]; then | |
ELB_NAME="${ELB}" | |
break | |
fi | |
done | |
ELB_INSTANCE_IDS='' | |
if [ "${ELB_NAME}" != "" ]; then | |
break; | |
fi | |
done | |
# ELB 配下だったら取り外す | |
if [ "${ELB_NAME}" != "" ]; then | |
echo " Remove ELB: ${INSTANCE_ID} from ${ELB_NAME}" | |
aws elb deregister-instances-from-load-balancer –load-balancer-name=${ELB_NAME} –instances=${INSTANCE_ID} | |
fi | |
# インスタンス停止して、stopped になるまで待つ | |
while : | |
do | |
EC2_STATE=`aws ec2 describe-instances –instance-ids ${INSTANCE_ID} | jq -r '.Reservations[].Instances[].State | .Name'` | |
echo "${INSTANCE_ID} : ${EC2_STATE}" | |
if [ "${EC2_STATE}" = "running" ]; then | |
aws ec2 stop-instances –instance-ids ${INSTANCE_ID} | |
fi | |
if [ "${EC2_STATE}" = "stopped" ]; then | |
break | |
fi | |
sleep 10 | |
done | |
# インスタンスタイプを変更する | |
aws ec2 modify-instance-attribute –instance-id ${INSTANCE_ID} –instance-type ${INSTANCE_TYPE} | |
# インスタンス開始して、running になるまで待つ | |
aws ec2 start-instances –instance-ids ${INSTANCE_ID} | |
while : | |
do | |
EC2_STATE=`aws ec2 describe-instances –instance-ids ${INSTANCE_ID} | jq -r '.Reservations[].Instances[].State | .Name'` | |
echo "${INSTANCE_ID} : ${EC2_STATE}" | |
if [ "${EC2_STATE}" = "running" ]; then | |
break | |
fi | |
sleep 10 | |
done | |
# ELB に参加させる | |
if [ "${ELB_NAME}" != "" ]; then | |
echo " Add ELB: ${INSTANCE_ID} to ${ELB_NAME}" | |
aws elb register-instances-with-load-balancer –load-balancer-name=${ELB_NAME} –instances=${INSTANCE_ID} | |
fi |
secure ログの見方
IPアドレスごとの ssh 接続成功件数
grep "Accepted" /var/log/secure* | awk '{print $9, $11;}' | sort | uniq -c
IPアドレスごとの ssh 接続失敗件数
grep -E "Failed|Invalid" /var/log/secure* | awk '{print $10;}' | sort | uniq -c | sort
[AWS] AWSのCloudWatchで取得できるBillingの情報を毎日Slackに通知させて費用を常に把握する
#!/bin/sh | |
# 昨日の日付 | |
yesterday=`date -d '1 days ago' +%Y-%m-%d` | |
# 一日分の Maximum 値を使って | |
period='86400' | |
statistics='Maximum' | |
# CloudWatchからBillingのデータを持ってくる | |
billing=`aws –region us-east-1 cloudwatch get-metric-statistics \ | |
–namespace 'AWS/Billing' \ | |
–dimensions "Name=Currency,Value=USD" \ | |
–metric-name EstimatedCharges \ | |
–start-time "${yesterday} 00:00:00" \ | |
–end-time "${yesterday} 23:59:59" \ | |
–period ${period} –statistics "${statistics}" \ | |
| jq ".Datapoints[].${statistics}"` | |
strings="${yesterday}までのAWSの利用費(月毎)です。 EstimatedCharges : \$${billing}" | |
# DevOpsManに伝える | |
curl -s https://slack.com/api/chat.postMessage -X POST \ | |
-d "channel=#CHANNEL" \ | |
-d "text=${strings}" \ | |
-d "username=USER" \ | |
-d "icon_emoji=:ICON:" \ | |
-d "token=xoxp-0000000000-0000000000-0000000000-000000" |
参考: AWSのCloudWatchで取得できるBillingの情報を毎日Slackに通知させて費用を常に把握する – さよならインターネット
参考URLだと ruby で処理してるけど、aws-cli, jq と curl 使ってるだけだから、ruby 使わなくても sh だけでいいんでないかなーと思った
[wp-cli] サブディレクトリにインストールされている WordPress の一覧を取得する
#!/bin/sh | |
find /var/www/vhosts/ -maxdepth 2 -type f -name wp-config.php | while read thisfile; do | |
wp_path=${thisfile%/*} | |
echo "***** ${wp_path}" | |
wp_version=`wp –path=${wp_path} core version` | |
wp_home=`wp –path=${wp_path} eval "echo home_url();"` | |
echo "${wp_home} : ${wp_version}" | |
done; |
while ループ内で wp core update とかをすれば、一撃ですべての WordPress をアップデートできるよ