のぴぴのメモ

自分用のLinuxとかの技術メモ

freeコマンドとmeminfoを取得してCSV形式で保存するシェルスクリプト

はじめに

昔作った/proc/meminfoを取得時刻情報取得スクリプトを改造して作った、freeコマンド+/proc/meminfoを取得して、CSV形式で出力するシェルスクリプトです。
nopipi.hatenablog.com

ツール説明

使い方

  1. シェルのファイルを配置して、"chmod +x collect_mem.sh"で実行権限を付与する。
  2. 実行する。(カレントディレクトリに、"meminfo.YYYYMMDDHHMMSS"形式で3秒間隔でデータが出力されます)
  3. 終了したい場合は、”Ctrl+c”で終了する。

出力結果

CSV形式で以下の情報がファイルに出力されます。

  • 取得日と時刻
  • freeコマンド 2行目(Mem:)の各情報
  • freeコマンド 3行目(Swap:)の各情報
  • /proc/meminfo情報
"DATE","TIME","free-mem-total(kb)","free-mem-used(kb)","free-mem-free(kb)","free-mem-share(kb)","free-mem-buff/cache(kb)","available(kb)","free-swap-total(kb)","free-swap-used(kb)","free-swap-free(kb)","MemTotal:(kB)","MemFree:(kB)","MemAvailable:(kB)","Buffers:(kB)","Cached:(kB)","SwapCached:(kB)","Active:(kB)","Inactive:(kB)","Active(anon):(kB)","Inactive(anon):(kB)","Active(file):(kB)","Inactive(file):(kB)","Unevictable:(kB)","Mlocked:(kB)","SwapTotal:(kB)","SwapFree:(kB)","Dirty:(kB)","Writeback:(kB)","AnonPages:(kB)","Mapped:(kB)","Shmem:(kB)","Slab:(kB)","SReclaimable:(kB)","SUnreclaim:(kB)","KernelStack:(kB)","PageTables:(kB)","NFS_Unstable:(kB)","Bounce:(kB)","WritebackTmp:(kB)","CommitLimit:(kB)","Committed_AS:(kB)","VmallocTotal:(kB)","VmallocUsed:(kB)","VmallocChunk:(kB)","HardwareCorrupted:(kB)","AnonHugePages:(kB)","HugePages_Total:()","HugePages_Free:()","HugePages_Rsvd:()","HugePages_Surp:()","Hugepagesize:(kB)","DirectMap4k:(kB)","DirectMap2M:(kB)"
2017/09/27, 03:46:11,1883560,386348,792416,70516,704796,1237452,839676,0,839676,1883560,792680,1237716,5652,618276,0,313016,390848,80848,69604,232168,321244,0,0,839676,839676,0,0,79948,23984,70516,80868,45604,35264,1744,4952,0,0,0,1650384,365624,34359738367,7444,34359728128,0,6144,128,128,0,0,2048,44992,2052096
2017/09/27, 03:46:14,1883560,386144,792616,70516,704800,1237656,839676,0,839676,1883560,792680,1237720,5652,618280,0,313044,390848,80872,69604,232172,321244,0,0,839676,839676,4,0,79956,23984,70516,80868,45604,35264,1808,4924,0,0,0,1650384,365624,34359738367,7444,34359728128,0,6144,128,128,0,0,2048,44992,2052096

*補足
HugePage周りの挙動を確認するための情報収集用にこしらえたものです。

"LB + Web x 2 + RDB"マルチAZ”でWordPressをインストールするCloudFormation

はじめに

前にAWSさんの体験ハンズオンで経験した"LB + Web x 2 + DB x 2"環境構築して、そこに動作確認としてWordPressをインストールして動かすところまでの手順を、CloudFormationを使って自動化して見ました。WordPressのインストールは、CloudFormationのcfn-init ヘルパースクリプトを使っています。

構成概要

f:id:nopipi:20170910213131p:plain

  • 東京リージョンでの利用前提(手抜きです)
  • Webサーバ用のPublicSubnetを2つと、RDB用のPrivateSubnetを2つ作成
  • Subnetは2つのAZ(AvailabilityZone)にサブネットをそれぞれ配備する
  • WebサーバへのWordPressインストールは、cfn-init ヘルパースクリプトを利用。下記作業時実施。
    • 前提パッケージと、WordPressのダウンロードと解凍コピー
    • 定義ファイルの作成
    • サービスの起動

CloudFormationコード

SRPM展開&Gun global解析&squashfs化する自作ツールの説明

1.ツールができること

"srpm2html.py"は、SRPMソースコードを展開、Gnu global処理、その他諸々を自動化する自作ツールです。
具体的には、このツールを使うと以下の一連の作業をサボることができます。

コードはgithub(gist)に登録してあります。

2.インストール方法

2.1 前提環境

Linuxであれば多分動くと思います。(私は、CentOS6,AmazonLinux上で利用しています)

2.2 前提パッケージ

この自作ツールを実行するためには以下のrpmパッケージが必要です。*1*2

下記コマンドでRPMパッケージをインストールします。

sudo yum install rpm-build squashfs-tools gcc make ncurses-devel

2.3 Gnu Globalのインストー

Gnu globalはソースコードをダウンロードしてmakeします。

wget http://tamacom.com/global/global-6.5.6.tar.gz
tar -xxvf global-6.5.6.tar.gz
cd global-6.5.6
./configure
make
sudo make install

2.4 ツールのセットアップ

srpm2html.pyは、githubに登録してあるのでそこからダウンロードします。

cd "セットアップしたいディレクトリパスを指定"
wget https://gist.githubusercontent.com/Noppy/027ea703dd7084be0c3d4d99ce618109/raw/1e3eefeb83c7542d37c8c455701a0f727df128d4/srpm2html.py
chmod +x srpm2html.py 

2.5 ディレクトリの準備

デフォルトでは下記ディレクトリが必要になります。ディレクトリは実行時の引数(後述)または、pythonの先頭のデフォルト設定を書き換えることで変更可能です。

  • 必要なディレクト
    1. /tmp : srpmのダウンロードと追加するfstabの作成に使用。容量は利用しない。
    2. /data/rpmbuild : srpmインストール、コード展開、globl解析をするメイン作業用。
      • 大量のファイルを作成するため、ファイルシステムフォーマット時にするinodeを潤沢に確保したほうが良い
        • フォーマット例:mkfs.ext4 -L rpmbuild -i 2048 /dev/sdb1
      • メモリが潤沢にある場合は、tmpfs(メモリファイルシステム)の利用が良い。
    3. /data/squshfs : 作成したsquashfsファイルの格納先
    4. /data/kernel : Globalが生成したhtmlのsquashfs化したもののマウントポイントを作成するディレクトリ(kernelのsrpmを解析した場合)
    5. /data/tools : 上記と同じ(kernel以外の、srpmを解析した場合)
    6. /data/source:ソースコードsquashfs化したもののマウントポイントを作成するディレクト

2.6 sudo設定

最後のfstab更新とマウント実行時に、sudoコマンドを利用しています。srpm2html.py実行ユーザがsudoでroot昇格できるように設定を事前にして下さい。またパスワード入力が面倒な方は、NOPASSWDもして下さい。

3.使い方

3.1 簡単な使い方

簡単な使い方は以下のとおりです。

./srpm2html.py "SRPMファイルのURL"

例えば、CentOS7.3のカーネルソースを展開したい場合は以下の通りになります。

srpm2html.py http://vault.centos.org/7.3.1611/os/Source/SPackages/kernel-3.10.0-514.el7.src.rpm

3.2 引数の説明

  • 構文
usage: srpm_to_html.py [-h] [-d] [-t TMPDIR] [-r RPMBUILDDIR] [-s SQUASHFSDIR]  
                       [-K HTTP_KERNELSDIR] [-T HTTP_TOOLSDIR] [-S SOURCEDIR]  
                       SRPM_FilePath_or_URL
  • 必須引数
    • SRPM_FilePath_or_URL: srpmのURLまたは、ローカルに格納しているsrpmのファイルパスを指定します。
  • 主なオプション詳細
    • -h, --help : ヘルプの表示
    • -t TMPDIR, --tmpdir TMPDIR : tmpディレクトリの指定
    • -r RPMBUILDDIR, --rpmbuilddir RPMBUILDDIR : srpmの展開先と作業用ディレクトリの指定
    • -s SQUASHFSDIR, --squashfsdir SQUASHFSDIR : squashfsファイルの格納先ディレクトリ指定
    • -K HTTP_KERNELSDIR, --http_kernelsdir HTTP_KERNELSDIR : マウントポイントを作成するディレクトリ指定(kernel)
    • -T HTTP_TOOLSDIR, --http_toolsdir HTTP_TOOLSDIR : マウントポイントを作成するディレクトリ指定(kernel以外)
    • -S SOURCEDIR, --sourcedir SOURCEDIR : マウントポイントを作成するディレクトリ指定(ソースコード)

*1:gcc,make,ncurses-develは、Gnu globalインストール時に必要

*2:pythonも必要ですが、標準で大抵インストールされているので割愛