MySQL テーブル単位の容量確認
- SQL
1 | mysql> use zabbix |
- 実行結果
1 | +----------------------------+--------+----------+-------+-------+------+------+ |
ちなみに上記は Zabbix DBの結果
history (履歴) にデータが肥大化傾向にあるので
パーティション や Zabbix housekeeping での
保存期間設定を調整するなど必要なことがわかります。
1 | mysql> use zabbix |
1 | +----------------------------+--------+----------+-------+-------+------+------+ |
ちなみに上記は Zabbix DBの結果
history (履歴) にデータが肥大化傾向にあるので
パーティション や Zabbix housekeeping での
保存期間設定を調整するなど必要なことがわかります。
それは、ある日 QUALYS SSL LABS で SSL チェックしたとき
F になってる…
常に A+ を保っていたのに…
どうやら 2016/5/3 時点で新たに脆弱性が発見されたとのこと。
今回指摘されている CVE-2016-2107
:
AES-NI CBC MAC チェックで MITM 攻撃者がパディングオラクル攻撃可能なことがわかりました。この問題は、CVE-2013-0169(Lucky 13 パディング)の修正のために導入された箇所の不具合から発生しました。
上記対応策をまとめました。
※試験 OS 環境: CentOS7
以下記事では 「OpenSSL のバージョンを 1.0.2h/1.0.1t にあげてください。」とありますが、
段階的に試した所
以下コマンドで openssl のバージョンアップをした所
エラーが消え B となりました。
事前に Nginx を 1.11.1 にアップデートした為でしょうか汗
1 | # yum upgrade openssl -y |
config generator で 生成される ssl_ciphers ディレクティブをそのまま設定すると評価が B 止まりでした。
https://ssl-config.mozilla.org/
諸々含めたくない暗号化法があるようです。
1 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; |
_以下最終的に設定した ssl_ciphers_ すると A+ に戻りました。
1 | ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3'; |
OpenSSL の脆弱性はチェックし続けていかねば
HTTP Strict Transport Security を 有効化 (常時 SSL) にしないと
A+ は取れません。
常時 SSL はパフォーマンスにも影響するので
せめて A まで取る、という指針を決めてから着手してください。
脆弱性 CVE-2016-4450 に対応した Nginx 1.11.1 が 2016-05-31 リリースされたということで
早速バージョンアップを試みました。
SIOS Tech. Lab - エンジニアのためになる技術トピックス
ダウンタイムゼロで実行できました。
1 | # nginx -V |
1 | # cd /usr/local/src |
以下実行しないと nginx の configure が通りませんでした。
1 | # yum install pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel -y |
1 | ./configure: error: the HTTP image filter module requires the GD library. |
1 | ./configure: error: the HTTP XSLT module requires the libxml2/libxslt |
「現状の Nginx configure 確認」で取得した configure parameter から
「–add-dynamic-module=njs-1c50334fbea6/nginx」を削除
--add-dynamic-module=njs-1c50334fbea6/nginx
を指定した場合の Nginx configure error1 | adding module in njs-1c50334fbea6/nginx |
「–add-dynamic-module=njs-1c50334fbea6/nginx」を削除して configure 実施
1 | ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' |
1 | # make |
1 | # nginx -V |
こける。。
1 | # nginx -t |
サードパーティに依存するディレクティブについてはload_module
で SharedObject(*.so) を呼び出す必要があります。
1 | load_module "modules/ngx_http_geoip_module.so"; |
1 | # nginx -t |
1 | # systemctl reload nginx |
以上で Nginx バージョンアップが無事完了しました。
Prometheus 入門 にあるチュートリアルを
Ansible で簡単に構築できるようにした、
というものです。
先日 2016 年 6 月 14 日、
LINE 株式会社でのPrometheus Casual Talks #1に参加し
ナレッジのおさらいなどしたく、
構築法をまとめました。
最近話題の Pull 型の Query Filtering 可能で Grafana 等と連携できる モニタリング/Alert ツールです。
以下ツールをインストールしておいてください。
[https://github.com/kenzo0107/Vagrant-Prometheus]
1 | $ git clone https://github.com/kenzo0107/Vagrant-Prometheus |
1 | $ cd Vagrant-Prometheus |
3 node running !
1 | $ vagrant ssh-config > ssh.config |
1 | $ ansible default -m ping |
ok, success.
1 | $ ansible-playbook set_clients_prometheus.yml |
以下 PrometheusClient を起動しているサーバにアクセスし
起動されているか確認します。
以下のように表示されれば成功です。
1 | $ ansible-playbook set_server_prometheus.yml |
http://192.168.33.30:9090 にアクセス
以下のように表示されれば成功です。
是非多少なりとも一助となれば何よりです!
いじくり倒してみてください!
以上
完全なる備忘録です。
Jenkins で 毎月第 1 月曜日のみ設定しようとしたら
1 | Short cycles in the day-of-month field will behave oddly near the end of a month |
次の様に分けるとエラーが消えます。
アメリカでは
月間の期間を 4,5 週間の単位で
売り上げの結果を考える慣習があります。
その際に月初にレポートが欲しい
なんてときに今回このような処理をする必要がありました。
以上です。
1 | $ git clone https://gist.github.com/kenzo0107/714ece62cf6450386ff0fb16fd5b777a |
作った経緯は
日本版・海外版URLがあり、
海外版に日本からアクセスした場合は
日本版サイトにリダイレクトさせたい、
という依頼があった為です。
このスクリプトを利用して
海外版サイト .htaccess等でリダイレクト設定をしました。
以上です。
Jenkins とは別のサーバ上に
SonarQube をインストールし
アクセスできるまでをまとめました。
今回は Jenkins からソースを解析し
SonarQube でのメトリクス情報を表示までの実行方法をまとめます。
言語は どれでも良いですが、 今回は PHP とします。
以下概要になります。
プロジェクトを作成しプロジェクトキーを発行します。
http://
デフォルトでは以下 admin:admin アカウントでログイン
Item | Value |
---|---|
ID | admin |
PW | admin |
以上で SonarQube 側の事前準備は終了です。
Jenkins の管理 > Plugin の管理
にて SonarQube Plugin インストール
以下オフィシャルダウンロードページからリンク取得
Analyzing+with+SonarQube+Scanner
1 | $ cd /var/lib/jenkins |
Jenkins の管理 > システムの設定 へアクセス
JenkinsQube servers に必要項目入力
上記入力後保存
「sonarqubeTest」という名前のジョブを新規作成します。
以上で Jenkins 側の設定完了です。
ちなみにこちら EC-CUBE 1.1 のプロジェクトでした。
EC-CUBE のコード重複率が多く
無駄が如何に多いかがわかります。
以上です。
AWS E2 インスタンス上に MySQL, SonarQube インストールし起動するものの
MySQL が落ちるという事象が発生。
ログを見ると以下のエラーが。。
1 | InnoDB: mmap(137363456 bytes) failed; errno 12 |
1 | Cannot allocate memory for the buffer pool |
割りあてるメモリがないという話。
なので、メモリを作ります。
1 | // 空ファイル作成 |
1 | # free |
1 | # systemctl restart mysqld |
1 | $ mysql -u <user> -p<pass> <db> -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size'" |
エラーログにあった 137363456 を下回ってるのがわかります。
この割当メモリを増やします。
左から順に検索し該当するファイルがあればその my.cnf を参照します。
/etc/my.cnf → /etc/mysql/my.cnf → /usr/etc/my.cnf → ~/.my.cnf
1 | # mysql --help | grep my.cnf |
自分の方では
my.cnf 上に innodb_buffer_pool_size の設定項目がなかったので
追加しました。
1 | [mysqld] |
1 | # systemctl restart mysqld |
1 | $ mysql -u <user> -p<pass> <db> -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size'" |
今回発生していたエラーログが消えました。
sonarqube は
Java, Python, Ruby, PHP 等、複数言語のコードメトリクス集計ができる
優れものです。
以前 MacOSX ローカル環境で
Unity プロジェクト C#コードのコードメトリクス抽出方法をまとめました。
今回は CentOS7 上に構築する方法を以下にまとめました。
1 | # cd /usr/local |
1 | # tar xvf jdk-8u45-linux-x64.tar.gz |
1 | # ln -s jdk1.8.0_45 latest |
.bash_profile での設定ではユーザにより環境変数が異なるので
全ユーザ共通で設定する場合は /etc/profile.d/ 以下に shell を用意する。
1 | # echo "export JAVA_HOME=/usr/local/java/latest |
今回は同一サーバに MySQL インストールしています。
別途 MySQL サーバを立てる場合は不要です。
1 | # yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm |
以下サイトにてダウンロード zip を取得します。
SonarQube Donwloads
※ 2016-05-19 時点 最新は ver 5.5
1 | # mkdir /usr/local/sonarqube |
1 | # echo "setenv SONAR_HOME=/usr/local/sonarqube/sonar |
以下ファイルを編集し作成した DB にアクセスできるように設定します。
1 | sonar.jdbc.username=sonar # DB User |
以下ファイルを編集し SonarQube が利用する java コマンドを
インストールした JDK 内の java を指定するように変更
1 | #wrapper.java.command=java |
1 | # ln -s /usr/local/sonarqube/sonar/bin/linux-x86-64/sonar.sh /etc/init.d/sonar |
/etc/profile.d に設定した 環境変数を反映させるべくサーバ再起動します。
1 | # reboot |
http://<IPアドレス>:9000
SonarQube 管理ページが表示されれば OK です!
SonarQube の設定を見直すか、もしくは、
今回利用している ec2 t2.micro のような小メモリの場合
メモリ不足で MySQL が落ちる可能性があります。
以下参照して対応してください。
どんなプロジェクトでもここ修正したい!
と思うことは多々あるかと思います。
その際、なんとなくここ使いづらいから直そう!
という曖昧な判断ではなく
先立ってまず全体としてどういう状態にあるか、
を数値でみて判断する、
というプロセスが踏めるようになることを目的に導入しました。
次回は Jenkins からの実行方法をまとめます。
データ解析サービスを提供するサードパーティで
指定の Server, Path に指定形式で格納するように、
と指示がありました。
また、
「Protocol は sftp
のみ許可でお願いします」
とも。
定期実行する必要もあったため
シェルで書けないかということで、
以下まとめました。
expect で通常、対話形式となるsftpコマンドの先読みでパスワードを通過
-oオプションで bachmode no
を指定し以下のエラーを回避
1 | Permission denied (publickey,password). |
当方では、Jenkins や cron でシェルを定期実行する必要があった為
明示的にバッチファイルの内容を指定できるようにしています。
以上です。