- 投稿日:2019-07-30T23:22:51+09:00
cURLしてHTTPステータスが200以外だったら再起動する
背景
弊社の社内システムはLinux+Apache+Tomcatで動いているものがあるのですが、原因不明でTomcatが停止してしまい、HTTP503が発生する現象が発生していました。
言い訳
今どきApacheではなくてnginxにしたいし、Tomcatが停止してしまうのはバグなような気がしますが、それほどクリティカルなシステムでもないし、業務が停止してしまうほどではないので優先度:最低の状態。
表題のとおり
旧時代的な対応ですが、このような対応にしました。まあ、備忘録です。
keepalive.sh#!/bin/bash # 死活監視したいURL REQUEST_URL=http://hoge/paka HTTP_STATUS=`curl -LI ${REQUEST_URL} -o /dev/null -w '%{http_code}\n' -s` echo `date '+%y/%m/%d %H:%M:%S'` "HTTP STATUS:"${HTTP_STATUS} if [ $HTTP_STATUS = "200" ]; then echo `date '+%y/%m/%d %H:%M:%S'` "動いているよ!" exit; else echo `date '+%y/%m/%d %H:%M:%S'` "死んでいるよ!" systemctl restart tomcat.service ficronでこのシェルを実行する場合は環境変数に注意です。
本当はログの出力をしていたけど、それは省略。適当にやってください。
- 投稿日:2019-07-30T22:27:11+09:00
LVMでボリューム拡張手順(虎の巻)
ボリューム拡張が必要になってくると思うのでその覚書
基本的にCentOS系のOSで検証をしているけど、Debianでも使えると思う
前提条件:VirtualBoxのHDDがVDI形式であること
vmdkだと可変ではないので拡張できない、そういった場合は別のHDDを作ってそれをアタッチメントすればよい
以下はVirtualBoxで拡張後にゲストOS内で認識させる方法
fdiskを実行して新規パーティションを立てる
ブロックサイズは認識されているので基本的にはおおもとの/dev/sdaを参照する。
/dev/sdaは[root@localhost ~]# fdisk /dev/sda WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): p Disk /dev/sda: 33.3 GB, 33263140864 bytes ★ ここが 現時点のサイズと違う状態であれば使っていない空間がある 255 heads, 63 sectors/track, 4044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00070a84 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 64 1306 9972736 8e Linux LVM パーティションを新規に作成するので"n"を選択して作成 Command (m for help): n Command action e extended p primary partition (1-4) ★ 基本はこっちを選択する p 今回はパーティション3を作成する。 限定的な容量追加など特別の事情がない限り後はデフォルトでOK Partition number (1-4): 3 First cylinder (1306-4044, default 1306): Using default value 1306 Last cylinder, +cylinders or +size{K,M,G} (1306-4044, default 4044): Using default value 4044 確認のため"p"で確認をする。 Command (m for help): p Disk /dev/sda: 33.3 GB, 33263140864 bytes 255 heads, 63 sectors/track, 4044 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00070a84 Device Boot Start End Blocks Id System /dev/sda1 * 1 64 512000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 64 1306 9972736 8e Linux LVM /dev/sda3 1306 4044 21997670 83 Linux ★ここが追加されていればOK
- 投稿日:2019-07-30T19:39:47+09:00
nusterキャッシュ永続化
NusterはHAProxyを元に開発したキャッシュサーバで、HAProxyと互換性がある。
そしてHAProxyのACLを利用して細かいキャッシュルールを定義できる。新しいリリースしたv3.0.0.19では永続化機能が追加されて、永続化について紹介したいと思います。ホームページ
https://github.com/jiangwenyuan/nusterruleベースで4つの永続化モードが使えます。
nuster rule name [key KEY] [ttl TTL] [code CODE] [disk MODE] [if|unless condition]
- off: デフォルト、メモリのみに保存する
- only: メモリに保存せず、ディスクだけに保存する
- sync: メモリとディスクに保存してからクライアントに返す
- async: メモリに保存してクライアントに返す、後ほどmaster processによってディスクに保存される
例えば
global master-worker nuster cache on data-size 10m dir /tmp/cache nuster nosql on data-size 10m dir /tmp/nosql backend be nuster cache on nuster rule off disk off ttl 1m if { path_beg /disk-off } nuster rule only disk only ttl 1d if { path_beg /disk-only } nuster rule sync disk sync ttl 1h if { path_beg /disk-sync } nuster rule async disk async ttl 2h if { path_beg /disk-async } nuster rule others ttl 100/disk-off はメモリのみに保存される
/disk-only はディスクのみに保存される
/disk-sync はメモリとディスクに保存してからクライアントに返す
/disk-async はメモリに保存してクライアントに返す。後ほどmaster processによってディスクに保存される
ほかはメモリに保存される
- 投稿日:2019-07-30T13:21:19+09:00
curlコマンドでSSLクライアント認証を行うには
概要
SSLクライアント証明書(p12ファイル)からPEMファイル(鍵付き証明書)を作成し、curlコマンドでSSLクライアント認証を行う。
実行環境
CentOS Linux release 7.5.1804 (Core)
手順
openssl インストール
opensslコマンドでPEMファイルを生成するので、opensslコマンドがない場合は下記手順を実行してください。
$ curl -O https://www.openssl.org/source/openssl-1.0.2n.tar.gz . $ tar xvzf openssl-1.0.2n.tar.gz $ cd openssl-1.0.2n $ ./config -fPIC shared $ make $ make install $ ln -sf /usr/local/ssl/bin/openssl /usr/local/bin/opensslPEMファイル作成
opensslコマンドで鍵付き証明書を作成する。
$ openssl pkcs12 -in file.p12 -out cert.pem -nodes -clcertscurlコマンドでSSLクライアント認証を行う
PEFファイルのパスは、その階層にいても相対パスまたは絶対パスで書く。
$ curl -E ./cert.pem URLAuthorization, Bearer トークンを使ったAPIがあった場合などは下記のようにヘッダにトークンを指定すれば認証できる。
$ curl -H "Authorization: xxxxxxxx" -E ./cert.pem URL以上!
- 投稿日:2019-07-30T07:52:20+09:00
curl よく使うコマンドを端的に
curlからwebAPIにPOSTする方法
ずいぶん前に下位10%のダメなエンジニアにだけ解けないパズルを解いた時にまとめたもの。
パラメータを直接指定して送る場合
shellcurl -v http://challenge-your-limits.herokuapp.com/challenge_users \ -X POST \ -d 'name=your-name&email=123456789@example.com&comment=Thanks!' | jq .json形式で送る場合
shellcurl -v http://challenge-your-limits.herokuapp.com/challenge_users \ -X POST \ -H "Content-Type: application/json" \ -d '{"name":"your-name","email":"123456789@example.com", "comment":"Thanks!"}' | jq .オプション
-v レスポンスヘッダを標準出力
-X リクエストの種類を指定
-H リクエストにヘッダを追加
-d ボディの追加
\ コマンドラインにおいて複数行入力したい場合に使うmanでdオプションの説明を見てみると
Sends the specified data in a POST request to the HTTP server
とあるので、この場合は本来XオプションでPOSTを指定する必要はないがオプションの紹介のために記載しておく
jq
jqはjsonをパースするためのコマンドで、|(パイプ)で繋げることで標準入力として受け取ったjsonを整形し標準出力に表示する
Appendix
urlにあるファイルをダウンロード
shellcurl -O url
- 投稿日:2019-07-30T04:31:00+09:00
使ってるisp(プロバイダ)確認方法
traceroute 1.1.1.11、2番目に出てくるのがisp
1.1.1.1はCloudflareのパブリックDNSサービスのip以上。
- 投稿日:2019-07-30T04:17:05+09:00
アクセスログからユーザーエージェント(user-agent)を抜き出す(取得する)
以下、実際の活用例
cat /var/log/httpd/access_log* | cut -f6 -d'"' | sort -r | uniq cat /var/log/httpd/ip\_direct\_custom_log* | cut -f6 -d'"' | sort -r | uniq cat /var/log/httpd/ssl\_access\_log* | cut -f6 -d'"' | sort -r | uniqcut ―行から固定長またはフィールド単位で切り出す
-f N番目のフィールドを抜き出す
-d 区切り文字を変更、デフォルトはタブsort 並べ替え
-r reverseの略、逆順で並べ替え
1フィールド目の値でソートがデフォルトuniq 重複削除
- 投稿日:2019-07-30T04:17:05+09:00
アクセスログからユーザーエージェントを抜き出す
以下、実際の活用例
cat /var/log/httpd/access_log* | cut -f6 -d'"' | sort -r | uniq cat /var/log/httpd/ip\_direct\_custom_log* | cut -f6 -d'"' | sort -r | uniq cat /var/log/httpd/ssl\_access\_log* | cut -f6 -d'"' | sort -r | uniqcut ―行から固定長またはフィールド単位で切り出す
-f N番目のフィールドを抜き出す
-d 区切り文字を変更、デフォルトはタブsort 並べ替え
-r reverseの略、逆順で並べ替え
1フィールド目の値でソートがデフォルトuniq 重複削除
- 投稿日:2019-07-30T00:01:27+09:00
Linux IPv6 関連コマンドメモ
Linux で IPv6 を利用する際の基本的なコマンドメモ
インタフェイスに付与されたアドレス確認
$ ip address show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 link/ether 06:a3:df:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 172.31.xx.xx/20 brd 172.31.xx.xx scope global eth0 valid_lft forever preferred_lft forever inet6 2xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global valid_lft forever preferred_lft forever inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link valid_lft forever preferred_lft foreverルーティングテーブル
$ ip -6 route list type unicast 2xxx:xxxx:xxxx:xxxx::/64 dev eth0 proto kernel metric 256 pref medium fe80::/64 dev eth0 proto kernel metric 256 pref medium default via fe80::xxxx:xxxx:xxxx:xxxx dev eth0 proto ra metric 1024 expires xxxsec hoplimit 64 pref mediumPing 疎通確認
- localhost
$ ping6 ::1
$ ping6 2001:4860:4860::8888
curl 接続確認
$ > curl -6 -i https://www.jpn.earth/remote_addr.cgi HTTP/2 200 date: Mon, 29 Jul 2019 14:54:49 GMT content-type: text/plain; charset=UTF-8 2xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxxDNS
$ dig aaaa www.google.com +rec +short 2404:6800:4004:81a::2004
公開サービス
$ netstat -an -A inet6 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 :::80 :::* LISTEN tcp 0 0 :::22 :::* LISTEN