読者です 読者をやめる 読者になる 読者になる

IT Notebook

ITについての備忘録的なブログです

Nginx - Tomcatと連携させた時にハマった件

Nginx

先日Tomcatで直接受け付けていたサーバをNginxで受け付けるようにして リバースプロキシでTomcatへ渡す設定した時にハマったので、その時の備忘録となります。

ハマったこと

  • リパースプロキシ設定は特に問題なかったが、ログインするとなぜか「 127.0.0.1 で接続が拒否されました。 」と表示されエラーとなる。

対応

  • リバースプロキシの前に「 proxy_set_header Host $http_host; 」を設定する。

初期設定

server {

...

    location / {
    proxy_pass http://127.0.0.1:8080;
  }
}

変更後設定

server {

...

    location / {
    proxy_set_header Host $http_host;
    proxy_pass http://127.0.0.1:8080;
  }
}

※参考

Nginx - CSSファイルが更新されない時の対応について

Nginx

以前CSSファイルが更新されないという減少が発生した時の対応となります。

原因

  • Nginxで「sendfile on;」というパラメータが有効になっていた。

このパラメータを有効にしていると、kernelのシステムコール「sendfile」を使用して、kernel内にファイルを複写するようです。

対応

vi /etc/nginx/nginx.conf
---
    sendfile off;
---
sudo service nginx restart

デフォルトはoffのよう。いつ設定されたのかは不明。。。

Linux - プロンプトにホスト名を表示する方法

Linux

Amazon Linuxのデフォルトのプロンプトはこんな感じです

[ec2-user@ip-10-10-10-10 ~]$

このサーバのホスト名を「test1」とした場合、以下のようなコマンドでとりあえず実行すると変更されるのですが

[ec2-user@ip-10-10-10-10 ~]$ sudo hostname test1
[ec2-user@ip-10-10-10-10 ~]$ exec bash
[ec2-user@test1 ~]$

再起動するとまた元に戻ってしまいます

[ec2-user@ip-10-10-10-10 ~]$

以下のように修正すれば再起動後でも反映されます

[ec2-user@ip-10-10-10-10 ~]$ sudo vi /etc/sysconfig/network
----------
HOSTNAME=test1
----------
[ec2-user@ip-10-10-10-10 ~]$ sudo init 6

再起動後ログインしたら変更される

[ec2-user@test1 ~]$

サーバを設定するときにたまにググっていたので、備忘録的な記載となります

sysbench - sysbenchコマンドサンプル

sysbench

sysbenchのコマンドサンプル。自分用にメモ。

CPU処理性能

sysbench --test=cpu --cpu-max-prime=20000 --num-threads=16 run > sysbench_cpu_16.txt
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=128 run > sysbench_cpu_128.txt

Disk処理性能

sysbench --test=fileio --file-total-size=10G prepare
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqwr --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_seqwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrewr --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_seqrewr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrd --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_seqrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrd --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_rndrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndwr --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_rndwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --num-threads=16 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_16_rndrw.txt

sysbench --test=fileio --file-total-size=10G --file-test-mode=seqwr --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_seqwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrewr --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_seqrewr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=seqrd --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_seqrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrd --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_rndrd.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndwr --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_rndwr.txt
sysbench --test=fileio --file-total-size=10G --file-test-mode=rndrw --num-threads=128 --file-block-size=16384 --init-rng=on --max-time=60 --max-requests=0 run > sysbench_fileio_128_rndrw.txt
sysbench --test=fileio --file-total-size=10G cleanup

Memory処理性能

sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=seq run > sysbench_memory_16_read_seq.txt
sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=rnd run > sysbench_memory_16_read_rnd.txt
sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=seq run > sysbench_memory_16_write_seq.txt
sysbench --test=memory --num-threads=16 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=rnd run > sysbench_memory_16_write_rnd.txt

sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=seq run > sysbench_memory_128_read_seq.txt
sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=read --memory-access-mode=rnd run > sysbench_memory_128_read_rnd.txt
sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=seq run > sysbench_memory_128_write_seq.txt
sysbench --test=memory --num-threads=128 --memory-total-size=100G --memory-block-size=200M --memory-scope=global --memory-hugetlb=off --memory-oper=write --memory-access-mode=rnd run > sysbench_memory_128_write_rnd.txt

スレッド処理性能

sysbench --test=threads --num-threads=16 run
sysbench --test=threads --num-threads=128 run

Mutex処理性能

sysbench --test=mutex --num-threads=16 run
sysbench --test=mutex --num-threads=128 run

roadworker - [ERROR] ArgumentError: invalid configuration option `:credential_provider' の対応方法

roadworker

roadworkerのバッチ処理を別サーバに移行した時にエラーにハマったのでメモ このバッチ処理複数AWSアカウントに対応するため「--profile」を使用している その辺りでエラーがでているようす

環境

対応

roadworkerのバージョンを比較すると前の環境では、roadworker (0.5.4)、新環境ではroadworker (0.5.5)だったので、合わせてみたらエラーが解消された

gem uninstall roadworker -v 0.5.5
gem install roadworker -v 0.5.4

gemバージョンの確認方法

これは便利

gem list

VMware - VMwareの仮想マシンをAWSに移行する

VMware

プライベートクラウドVMWare仮想マシンパブリッククラウドAWSに移行したときのメモ

環境

  • Hypervisor : VMwareESXi5
  • OS : Ubuntu 12.04 LTS

手順

1.VMware上の仮想マシンova形式でエクスポート

移行対象の仮想マシン複数ディスクなのでova形式でエクスポート

2.エクスポートしたファイルをs3へアップロード

ova形式のファイルをAWSのAMIとしてインポートするためにs3へアップロード

aws s3 cp sample.ova s3://sample-bucket/
3.s3へアップロードしたファイルをAMIとしてインポート

s3へアップロードしたova形式のファイルをAMIとしてインポート

aws ec2 import-image --cli-input-json "{  \"Description\": \"SAMPLE\", \"DiskContainers\": [ { \"Description\": \"SAMPLE\", \"UserBucket\": { \"S3Bucket\": \"sample-bucket\", \"S3Key\" : \"sample.ova\" } } ]}"
4.インポートしたAMIからEC2インスタンスをとりあえず起動

インポートしたAMIは「import-ami-XXXXXXXX」というAMI名で作成されるので、そのAMIを指定してとりえず起動

5.起動したEC2インスタンスを一旦停止

そのままでは起動しなかった、「Get System Log」を確認しても何も出力されていなかったので、一旦停止

6.EC2インスタンスのルートデバイスをデタッチして別インスタンスのボリュームとしてアタッチ

ルートデバイスの設定を変更しないと起動しなさそうなので、一旦デタッチして別のEC2インスタンスの「/dev/sdf」にアタッチ

7.アタッチしたボリュームで設定変更

ルートデバイスをマウントしたEC2インスタンスにログインしてマウント

sudo su -
mount -t ext4 -o defaults /dev/xvdf1 /mnt

chrootでマウントしたデバイスをルート化

chroot /mnt

resolv.confの設定をVPCに合わせる

vi /run/resolvconf/resolv.conf
--------------------------------------------------------------------------------
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.30.0.2
search ap-northeast-1.compute.internal
--------------------------------------------------------------------------------

パッケージ情報を一旦リセット

rm -r /var/lib/apt/lists
mkdir /var/lib/apt/lists
mkdir /var/lib/apt/lists/partial
apt-get autoclean
apt-get clean
apt-get update

grub再設定のための準備作業

apt-get install grub
ln -s /boot/grub/menu.lst /boot/grub/grub.conf
ln -s /boot/grub/grub.conf /etc/grub.conf
rm -f /boot/grub/*stage*
cp /usr/*/grub/*/*stage* /boot/grub/
rm -f /boot/grub/device.map

chrootを一旦終了

exit

grub再設定

cat <<EOF | grub --batch
device (hd0) /dev/xvdf
root (hd0,0)
setup (hd0)
EOF

メッセージはこんな感じ
--------------------------------------------------------------------------------
Probing devices to guess BIOS drives. This may take a long time.

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub> root (hd0,0) /dev/xvdf
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  21 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+21 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
--------------------------------------------------------------------------------

menu.lstをマウントしたEC2インスタンスからコピーして編集 ※カーネルとかは適宜環境に合わせて設定

cp -p /boot/grub/menu.lst /mnt/boot/grub/menu.lst

vi /mnt/boot/grub/menu.lst
----------------------------------------
title           Ubuntu 12.04.4 LTS, kernel 3.11.0-15-generic
root            (hd0,0)
kernel          /boot/vmlinuz-3.11.0-15-generic root=/dev/xvda1 console=ttyS0 xen_pv_hvm=enable
initrd          /boot/initrd.img-3.11.0-15-generic

title           Ubuntu 12.04.4 LTS, kernel 3.11.0-15-generic (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-3.11.0-15-generic root=/dev/xvda1 single
initrd          /boot/initrd.img-3.11.0-15-generic

title           Ubuntu 12.04.4 LTS, memtest86+
root            (hd0)
kernel          /boot/memtest86+.bin
----------------------------------------

fstabを下記のように設定

vi /mnt/etc/fstab
----------------------------------------
/dev/xvda1/     /        ext4   defaults,noatime        1 1
/dev/xvdf       /opt    ext4    defaults,nobootwait,noatime,comment=cloudconfig 0       2
none /dev/pts devpts git=5 mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
----------------------------------------

マウントしたボリュームに対してgrub-install

grub-install --root-directory=/mnt /dev/xvdf1
----------------------------------------
Probing devices to guess BIOS drives. This may take a long time.
Installing GRUB to /dev/xvdf1 as (hd0,0)...
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/xvdf
----------------------------------------

再度chrootしてupdate-grub

chroot /mnt
update-grub
8.設定変更したボリュームを再度インスタンスにマウントしてEC2インスタンスを起動

問題なく起動できることを確認

やってみた感想

手順はざっとこんな感じだったけど、grubの設定関連ではかなり悩まされてしまったのが反省 起動デバイスが認識できずに、起動できなくて何度もトライアンドエラーで時間がかかってしまった 起動してしまえばその後は問題なく動作しているというのは、仮想化技術はすごい!

参考

http://qiita.com/cs_sonar/items/21dbb3462708e146a426

td-agent - ログ出力レベルを変更する方法

td-agent

使い続けて3年以上。ログはerrorとwarningしか出力されないと思い込んでしまっていた ついに詳細なログを確認しないと解決出来そうにない問題にぶち当たり調べた時のメモ

環境

  • OS:Ubuntu 14.04.2 LTS
  • td-agent:0.12.12

修正箇所

「/etc/init.d/td-agent」の以下の箇所を修正

ここを

# Arguments to run the daemon with
TD_AGENT_ARGS="${TD_AGENT_ARGS:-${TD_AGENT_BIN_FILE} --log ${TD_AGENT_LOG_FILE} ${TD_AGENT_OPTIONS}}"

こんな感じに

# Arguments to run the daemon with
TD_AGENT_ARGS="${TD_AGENT_ARGS:-${TD_AGENT_BIN_FILE} -v --log ${TD_AGENT_LOG_FILE} ${TD_AGENT_OPTIONS}}"

ログレベル

  • 「-v」.... infotoとdebugレベルが追加で出力される。ログを見た限り実運用でも耐えられるレベルだと思う。
  • 「-vv」... traceレベルが追加で出力される。td-agentの動作すべてを出力されるのでとんでもない量のログが出力される。

とりあえずは「-v」で運用しようと思います

参照

http://please-sleep.cou929.nu/log-level-of-td-agent.html