AWS cloudwatchで監視
前職ではmonitoringって言ってたけど、日本語では監視なんだと最近気づきました。
- CPU Utilization - EC2デフォルトでAlarmを作る
- Memory Usage - Custom metricsを作る
- Load Avarage - Custom metricsを作る
- サービスの監視 - LBでalarmを作る
- RDS FreeableMemory - RDSデフォルトで作る
- cloudwatch logs - エージェントいれる
1,2,3はここを参考にしました。 違う点はインタンスを動的に取得してるところと、サービス監視はLBのUnavailableを見てるのでコメントアウト。
#!/bin/bash export JAVA_HOME=/usr/lib/jvm/jre export AWS_CLOUDWATCH_HOME=/opt/aws/apitools/mon export EC2_REGION=ap-northeast-1 export AWS_CREDENTIAL_FILE=/home/ec2-user/cloudwatch/credential instanceid=`/opt/aws/bin/ec2-metadata -i | awk '{print $2 }'` # http status check #status=`/home/ec2-user/cloudwatch/http_status_check.sh http://www.global-step.jp` # 監視したいurlを記述 #if [ $status -eq 200 ]; then #Fail=0 #else #Fail=1 #fi #/opt/aws/bin/mon-put-data --metric-name "Http Status fail" --namespace "Custom Metrix" --dimensions "InstanceId=$instanceid" --value "$Fail" --unit "Count" # memory check memtotal=`free -m | grep 'Mem' | tr -s ' ' | cut -d ' ' -f 2` memfree=`free -m | grep 'buffers/cache' | tr -s ' ' | cut -d ' ' -f 4` let "memused=100-memfree*100/memtotal" /opt/aws/bin/mon-put-data --metric-name "FreeMemoryMBytes" --namespace "Custom Metrix" --dimensions "InstanceId=$instanceid" --value "$memfree" --unit "Megabytes" /opt/aws/bin/mon-put-data --metric-name "UsedMemoryPercent" --namespace "Custom Metrix" --dimensions "InstanceId=$instanceid" --value "$memused" --unit "Percent" # loadaverage check loadave1=`uptime | tr -s ' ' | cut -d ' ' -f 11 | cut -d ',' -f 1` /opt/aws/bin/mon-put-data --metric-name "LoadAverage" --namespace "Custom Metrix" --dimensions "InstanceId=$instanceid" --value "$loadave1" --unit "Count"
Cloudwatch Logs
特に詰まることなくドキュメント通り。
https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/QuickStartEC2Instance.html
#/etc/awslogs/awslogs.conf [/var/log/messages] datetime_format = %b %d %H:%M:%S file = /var/log/messages buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/messages [/srv/www/gsaweb/shared/log/production.log] datetime_format = %Y-%m-%d %H:%M:%S file = /srv/www/gsaweb/shared/log/production.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /srv/www/gsaweb/shared/log/production.log [/var/log/maillog] datetime_format = %Y-%m-%d %H:%M:%S file = /var/log/maillog buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/maillog
AWS Opsworks + CircleCI で自動デプロイ
- AWS IAMユーザー(circleci)を作成
- 作ったユーザのAWS Access Key ID/Secret Access Keyを取得
- CircleCIのSetting->Permissions->AWS Permissionsを追加
- awsコマンドを手元で走らせてデプロイできるか確認
注意:regionはus-east-1を使用する
$ aws opsworks --region us-east-1 create-deployment --stack-id $STACK_ID --app-id $APP_ID --command "{\"Name\":\"deploy\"}"
- deploy-staging.shに上記を記述し、circle.ymlに追加
machine: timezone: UTC ruby: version: 2.1.3 dependencies: pre: - sudo pip install awscli deployment: staging: branch: master commands: - ./script/deploy-staging.sh
deploy-stating.shは下記。
#!/bin/sh set -ex REGION='us-east-1' STACK_ID='yyy' APP_ID='xxx' aws opsworks --region $REGION create-deployment --stack-id $STACK_ID --app-id $APP_ID --command "{\"Name\":\"deploy\"}"
ニュースを読まない僕が選挙に行った。
今年は半分意図的に半分は多忙さでニュース等のメディアを自分から読むことをしてきてない。 それでもpassivelyにニュースは耳にしてしまう世の中なので生きる上で問題ない。 そんな自分が選挙に行った。
デフレ脱却は、格差社会を生むと思う。 儲ける人は儲けてGDPを押し上げるかもしれないけど、そうでないところではインフレは苦しい。 ファイナンスに強くない人は、銀行にただ貯金していて、その価値が減ってる。事実上、貯金額が減ってることすら知らない人がいるように思う。国として強くなっても、多くの人を犠牲にしてしまうのは意味がないように思う。
原発問題。原発の原因は地震でなく津波だと思う。そもそも地震で大変なのは、それ自体じゃなくて、その後の火事と津波等の二次災害。今やることは全力で福島を収束させることと安全対策後の原発稼働。石油が安くなってきてるからといって、地球のキャパ的に続かないし、クリーンエネルギーは格差社会の底辺には金銭的にきつい。
コンクリートへの公共事業。早くやめてほしい。借金して作るものじゃない。第2東名を走ってて、親は道がきれいで、渋滞がなくなってうれしそうだが、僕は悲しくなる。数十メートル作るのにいくらかかってて、これは子供の世代が返していくと思うと。正直、道なんがガタガタでいい。
憲法改正とか。戦争は不毛。そっちに流れるのは止めるべきこと。
僕の意見は教育を変革して、right directionにright moneyを。将来は将来の希望に託した方がいい。 自分でものを考え、実現できる人材を。多くの社会人がものを考えてない気がする。どうしてもメディアに流される。
最後に高齢化社会で選挙自体が破綻してない?って思う。 票を持つ高齢者が本当に50年後を考えて投票できてるのか、よくわからない。 地方の一票の格差よりもこの一票の格差の方がきつい。
Swift Fundamentals: The Language of iOS developmentを読んだ
Swift Fundamentals: The Language of iOS Development
- 作者: Mark Lassoff,Thomas Stachowitz
- 出版社/メーカー: LearnToProgram.tv, Inc.
- 発売日: 2014/09/22
- メディア: Kindle版
- この商品を含むブログを見る
とりあえず、読み終わりました。Object-Cを触った事ないのでXcodeも初めてでした。 シンタックスの説明がされていて、Xcodeも説明があって初学者には良い本でした。 LLとOOの素養があれば平易な内容です。
Appleの本にはxcodeやPlaygroundの説明もなく、いきなりシンタックスの説明が始まるので、そこが説明されていたので助かりました。
概要は掴めたけど、明らかに足りない。
今知りたいのは、
AngularJS+Slip.jsでタッチデバイスでリストの順番を並べるUIを作成する
上記のようにリストを動的にスマホで動かせるようにするためにSlip.jsを使いました。Directiveに定義してng-repeatのDOMに置きます。$last === true
でループが終わったところで発火するようにしています。JQueryのライブラリを使うときは、これ良く使いますね。
<li slip ng-repeat="photo in photos|orderBy:photo.ordering:reverse" > ... </li>
temp作成やscopeとserviceに突っ込んでるところは、今回の実装のためなので変更してください。 今回はphoto.orderingに順番が入っていて、これに基づきソートしてます。
(function(){ 'use strict'; angular .module('traberryApp') .directive('slip', slip); slip.$inject = ['$log', '$timeout', 'EditJourney']; function slip($log, $timeout, EditJourney){ return function(scope, element, attrs) { if (scope.$last === true){ $log.info('running slip'); var list = $(element).parent('ul').get(0); new Slip(list); // prevent swipe list.addEventListener('slip:beforeswipe', function(e) { e.preventDefault(); }, false); // instant reorder list.addEventListener('slip:beforewait', function(e){ if (e.target.className.indexOf('instant') > -1) e.preventDefault(); }, false); list.addEventListener('slip:reorder', function(e) { var spliceIndex = e.detail.spliceIndex; var originalIndex = e.detail.originalIndex; var temp = [].concat(scope.photos); // depending on what you need to change if (spliceIndex > originalIndex){ temp.splice(spliceIndex+1, 0, scope.photos[originalIndex]); temp.splice(originalIndex, 1); }else{ temp.splice(spliceIndex, 0, scope.photos[originalIndex]); temp.splice(originalIndex+1, 1); } for(var i=0; i<temp.length; i++){ temp[i].ordering = i; } // insert scope as well as service scope.photos = temp; EditJourney.setPhotos(temp); e.target.parentNode.insertBefore(e.target, e.detail.insertBefore); }); } }; } })();