クラウドインフラ構築記

現在AWSの構築支援に携わっております。今注視しているのは、GKE、BigQuery、Google Dataflowなどサービスを展開しているGoolge Cloud Platformです。

2015年11月29日
から hiruta
Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom はコメントを受け付けていません

Raspberry Pi 2 Model BをSORACOM Airに接続してみました。 #soracom

L-02Cの中古品を秋葉原のとある店で入手して、Raspberry Pi 2 Model BからSORACOM Airに接続してみました。

L-02CをRaspberry PiのUSBに接続すると、CDROMとして認識するので、ejectします。

# tail -f /var/log/messages
Nov 29 15:10:16 raspberrypi kernel: [ 175.315695] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Nov 29 15:10:16 raspberrypi kernel: [ 175.315712] usb 1-1.4: Product: docomo L02C
Nov 29 15:10:16 raspberrypi kernel: [ 175.315728] usb 1-1.4: Manufacturer: NTT DOCOMO, INC.
Nov 29 15:10:16 raspberrypi kernel: [ 175.315744] usb 1-1.4: SerialNumber: 353168047113660
Nov 29 15:10:16 raspberrypi kernel: [ 175.317668] usb-storage 1-1.4:1.0: USB Mass Storage device detected
Nov 29 15:10:16 raspberrypi kernel: [ 175.321508] scsi host0: usb-storage 1-1.4:1.0
Nov 29 15:10:17 raspberrypi kernel: [ 176.314558] scsi 0:0:0:0: CD-ROM LG Autorun 2.00 PQ: 0 ANSI: 0
Nov 29 15:10:17 raspberrypi kernel: [ 176.345053] sr 0:0:0:0: [sr0] scsi-1 drive
Nov 29 15:10:17 raspberrypi kernel: [ 176.345083] cdrom: Uniform CD-ROM driver Revision: 3.20
Nov 29 15:10:17 raspberrypi kernel: [ 176.358871] sr 0:0:0:0: Attached scsi generic sg0 type 5

必要なものをインストール。

# sudo apt-get install usb-modeswitch wvdial

デバイス認識情報を確認します。

# lsusb
Bus 001 Device 004: ID 1004:61dd LG Electronics, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

認識した情報から40-usb_modeswitchrulesに記載して、デバイスを再起動します。

ATTRS{idVendor}=="1004", ATTRS{idProduct}=="61dd", RUN+="usb_modeswitch '%b/%k'"

usbデバイスが認識していることを確認します。

# ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3

wvdial.confへの記載※自分の場合は、ttyUSB2になっていましたが、場合により別かもしれません。


# vi wvdial.conf

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = 1
Baud = 460800
New PPPD = yes
ISDN = 0
Phone = *99***1#
Carrier Check = no
Modem = /dev/ttyUSB2
APN = soracom.io
Username = sora
Password = sora

接続

# sudo wvdial &

ifconfigに、ppp0があることを確認、ppp0にプライベートIPが割り当てられているので、SORACOMまではインターネットに出ていないことが確認できます。

# ifconfig
3: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3
link/ppp
inet 10.166.183.42 peer 10.64.64.64/32 scope global ppp0
valid_lft forever preferred_lft forever

ルーティングをppp0にします。

# sudo route del default
# sudo route add default dev ppp0
# sudo route

SORACOM User consoleで、メタデータサービスの設定をしておきます。

$ curl -s http://metadata.soracom.io/v1/subscriber | jq .
{
"imsi": "44010xxxxxxxxxx",
"msisdn": "81xxxxxxxxxx",
"ipAddress": "10.xxx.xxx.xx",
"apn": "soracom.io",
"type": "s1.slow",
"groupId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx",
"createdAt": 1448079978960,
"lastModifiedAt": 1448780464401,
"expiredAt": null,
"terminationEnabled": false,
"status": "active",
"tags": {},
"sessionStatus": {
"lastUpdatedAt": 1448780464401,
"imei": "xxxxxxxxxxxxxxx",
"location": null,
"ueIpAddress": "10.xxx.xxx.xx",
"dnsServers": [
"100.127.0.53",
"100.127.1.53"
],
"online": true
},
"speedClass": "s1.slow",
"moduleType": "nano",
"plan": 0,
"expiryTime": null,
"operatorId": "OPxxxxxxxxxx",
"createdTime": 1448079978960,
"lastModifiedTime": 1448780464401
}

下記を参考にして、あっさり接続ができました。下記にも記載していますが、wvdialがエラーになることが1度ありました。

下記コメントも頂きました。後ほどトライします。

2015年11月22日
から hiruta
先日のIoTハンズオンに参加しました。 #cmdevio はコメントを受け付けていません

先日のIoTハンズオンに参加しました。 #cmdevio

先日AWSモバイル/IoTサービス徹底攻略!!~Developers.IO Meetup番外編~に参加しました。

センサーからOpenBlock BX1 →SORACOM Air →AWS IoT→DynamoDBまで登録する流れをハンズオンで体験できました。

  • SIMの挿入取り出しがしずらい。OpenBlock BX1ではナノサイズではなく、フルサイズで
  • OpenBlock BX1の時刻は同期しておかないとログ収集がうまくいかない
  • root証明書等スペースがあるファイルだとAWS IoTの設定ができない

Raspberry Pi2 等でも同様な仕組みは作成できると思われるが、Open Block BX1は、AWS Mobile SDK/3Gモジュール/WebUIが組み込まれており、事前準備がかなり省けることが実感。

AWS IoTの設定ですが、ハンズオン時はManagement Consoleで行いましたが、CLIでもできます。以下CLIでのAWS IoTの設定になります。

Thingの登録

aws iot create-thing --thing-name bx1

登録されたThingsを確認します。1度作成したthing名を削除して再登録しても登録自体はエラーは出ませんが、list-things、Management Consoleで確認しても登録されません。

この件、先ほど確認したところ、削除したThingで再登録できるようになっていました。

aws iot list-things
aws iot describe-thing --thing-name bx1-demo --region ap-northeast-1

証明書、秘密鍵、公開鍵を作成します。証明書は後からでも取得可能ですが、秘密鍵、公開鍵は作成時しか取得できないので、保存は忘れずに。

aws iot create-keys-and-certificate --set-as-active > cert.json
cat cert.json | jq .keyPair.PublicKey -r > thing-public-key.pem
cat cert.json | jq .keyPair.PrivateKey -r > private-key.pemm

証明書上位方は下記より取得できます。

aws iot​ describe-certificate --certificate-id "your-certificate-id" --output text --query certificateDescription.certificatePem > cert.pem

root証明書をダウンロードしておきます。

wget https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem -O rootCA.pem

IoTポリシを作成します。

 vi policy.json
{
 "Version": "2012-10-17", 
 "Statement": [{
 "Effect": "Allow",
 "Action":["iot:*"],
 "Resource": ["*"]
 }]
}
aws iot create-policy --policy-name awsiot-handon-policy --policy-document file://policy.json

作成したポリシは以下で確認できます。

aws  iot get-policy --policy-name awsiot-handon-policy --region ap-northeast-1

先ほど作成されたポリシを証明書と紐付けます。

aws  iot attach-principal-policy --principal "certificateArn" --policy-name "awsiot-handon-policy"

Thingsも証明書に紐付けます。

aws iot attach-thing-principal --thing-name "bx1-demo" --principal "certificateArn"

certificateArnには、下記で確認することができます。

aws --profile target1 iot list-thing-principals --thing-name  bx1-demo --region ap-northeast-1

AWS IoTからどんなアクションを行うかRuleで設定します。
Rule設定用のjsonテンプレートから作成するのが一番いいかと思われます。下記はDynamoDBと連携する例にはなりますが、Kinesis、Firehose、S3、SQS、SNSなどとも連携が可能です。

aws  iot create-topic-rule --generate-cli-skeleton
vi rule.json
{
 "ruleName": "IoTHandsonRule2",
 "topicRulePayload": {
 "sql": "SELECT * FROM 'handson/device01'",
 "description": "",
 "actions": [
 {
 "dynamoDB": {
 "tableName": "IoTHandsonRawData",
 "roleArn" : "arn:aws:iam::XXXXXXXXXXXX:role/aws_iot_dynamoDB",
 "hashKeyField": "sensor",
 "hashKeyValue": "${topic(2)}",
 "rangeKeyField": "timestamp",
 "rangeKeyValue": "${timestamp()}"
 }
 }
 ],
 "ruleDisabled": false
 }
}
aws  iot create-topic-rule --cli-input-json file://rule.json

作成したRulesを確認します。

aws --profile target1 iot list-topic-rules --region ap-northeast-1

AWS IoTのEnd Pointは下記で確認することができます。

aws  target1 iot describe-endpoint --region ap-northeast-1

先日のAWSモバイル/IoTサービス徹底攻略!!IoTハンズオンの際は、AWS IoTのエンドポイントとして、data.iot.ap-northeast-1.amazonaws.comで行いましたが、nslookupで確認したところ、同じ送信先IPアドレスになっていますので、どちらを使ってもいけると思われます。

秘密鍵、公開鍵、証明書の削除は現時点では、Management Consoleから行えないので(Deactiveは可能)、削除する場合は、CLIで行う必要があります。

 

 

 

 

2015年10月11日
から hiruta
Amazon Inspector previewを使用してみました。 #jawsug はコメントを受け付けていません

Amazon Inspector previewを使用してみました。 #jawsug

re:Invent 2015で発表されたAmazon Inspectorのpreviewが通りましたので、実際使用してみました。

Amazon Inspector Agentが対応するOS

  • Amazon Linux AMI 2015.09
  • Ubuntu Server 14.04 LTS

Agent Limits

  • 500 concurrent agents

まず素のAmazon LinuxをLaunchを行い、Inspector Agentをインストールします。

curl -O https://s3-us-west-2.amazonaws.com/inspector.agent.us-west-2/latest/install
chmod +x install; sudo ./install 

対応リージョン以外にはAgentもインストールが行えませんでした。

Inspector Service Roleを作成し、対象インスタンスのEC2 Tagsを付与します。リージョン跨ぎでinspectorを使えないのでは推測されます。

application-1tags

 

 

 

 

付与したEC2 Tagsを設定します。application-2

適用するルールパッケージを選択します。複数選択が可能。定期的にチェックをしてくれます。

  • Application Best Practices
  • Application Security Bast Practices
  • Network Security Best Practices
  • Operating System Security and Exposures
  • Common Vulnerabilities and Exposures
  • PCI DSS 3.0 Readiness

assessment

 

 

 

Create & Runでセキュリティチェックの初回チェックが開始されます。application-review

チェックが完了すると下記のように確認することが可能

inspector-result

Agentの対応OSが限定されている等拡充は待たれる。

 

2015年9月29日
から hiruta
第8回 コンテナ型仮想化の情報交換会@東京に参加しました。 #lxcjp はコメントを受け付けていません

第8回 コンテナ型仮想化の情報交換会@東京に参加しました。 #lxcjp

9月26日 IIJにて行われたコンテナ型仮想化の情報交換会Vol.8に参加しました。

Linux Namespaces

Hadoopでのコンテナ

Hadoop処理をコンテナで行う際のポイント

YARN http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

NodeManagerが、OSレベルのメモリを監視していて、物理メモリがある一定量超えたら、OOM Killerでコンテナを強制終了

処理基盤は、割り当てたリソースをそれなりに使う。Unixベースのプロセスベースのコンテナにするか、cgroupで管理するか検討が必要。

(タイトル上はdocker pluginとなっているが、諸事情により、)docker-machine、docker-swarm

docker-machineはdocker engineだけで制御するように便利。インストールも簡単。

ただし、docker machineはrepositoryとしてdocker hubの選択肢がない。

docker swarm

containersのnodeへの割り当て方法を制御も。

kubernatesと同様コンテナ管理ソフトになるが、kubernatesはノードの利用率を偏ることない仕組みだが、swarmはspread/binpack/randomとノード割り当て方法を制御可能。ノードの使い方で検討が可能。

kubernatesも、どのNodeに割り当てるか、nodeSelectorラベルで制御ができます。

SmartOS入門

illumosから派生したLinuxであるSmartOS

LX Branded Zone

コンテナとしてdoker imageも扱えるが、起動しないことも。デモでは、core dumpが。

MINCS – Container in the shell script

シェルスクリプトでのコンテナ実装

https://github.com/mhiramat/mincs.git

FreeBSD Jail

カーネルをいじらないといけない。

docker on FreeBSDの話も。

ただし、ネットワーク(vnet)がうまく動かないとのこと

 LXD入門

本勉強会の主催者によるLXD入門。LXDは、LXCの置き換えではない。コンテナを作成したり、管理とここに書かれているので、一種のコンテナ管理ソフトか。

ここからLTになります。

FreeBSD VPS(Virtual Private System)によるライブマイグレーション

FreeBSDのコンテナ実装であるVPS(Virtual Private System)

FreeBSD 10系ではVPSは対応していないので、FreeBSD9系で試したとのこと

FreeBSD 10系でライブマイグレーションするとリストア時にkernel panic

FreeBSD 9系はEoLなので、FreeBSD最新版での正式対応が待たれるか。

同じ内容で、LTを行った方(@spg-games)がFreeBSD 10 VPS用のパッチを。。。 https://github.com/spg-games/vps

FreeBSD VPSでライブマイグレーションのデモをコンテナへのping疎通をモニタしながら、ライブマイグレーションを行いましたが、数秒(2~3秒)タイムアウトするだけで復旧。さすがに無停止で切替は難しいか。

どのセッションもかなりDeepな内容で、コンテナ技術の基盤について、あまりDeepすぎてわからない部分(namespace)もありましたが、コンテナ技術dockerだけでなく、多種多様なコンテナ技術を堪能できた一日になりました。

kubernateについて調べて今後は発表できればと思う。

2015年9月19日
から hiruta
JAWS-UG アーキテクチャ専門支部 CDP議論会 #1に参加してきました。 #jawsug はコメントを受け付けていません

JAWS-UG アーキテクチャ専門支部 CDP議論会 #1に参加してきました。 #jawsug

先日のJAWS-UGアーキテクチャー専門支部#2に議論参加側で参加してきました。

Blue-Green deployment パターン(EC2)実装編の叩き台

Blue-Green deploymentとしては、ELBによるもの、DNSによるもの実装としては2つある。

Opsworks、ElasticBeanstalkは、DNSベース。

Blue-Green Deploymentとは異なりますが、Rolling Updateの方法も。過去Rolling Updateの記事を参考までに。

今回は、Ec2のBlue-Green deploymentの話でしたが、Docker、No EC2の場合もあり、幅広くなりそう。

Lambda + API Gateway

受け付ける元がIoTデバイスの場合、100%の許容は必要ないのでは。Kinesisとかバッファリングできるので、少々のダウンとか許容できる

API Gatewayのベストプラスティス

Deploy APIで、ステージング環境(Stage)を作成できるので、Stage→ProductionでAPI GatewayのDeployment管理はできる、ただ、Lambda等組み合わせるので、こちらも考慮する必要があるか。Inheit from Stageで/(production)にoverrideも。

screencapture-us-west-2-console-aws-amazon-com-apigateway-home-1442656318044

 

API Gatewayはプロトコル変換が可能。Lambdaを使うと待機リソースが不要。

CodeDeply

デプロイ方式の議論から

  • AMI
  • userdata (cloud-init)
  • Chef/Ansible

Enterpriseの現場では、一番のAMIデプロイが多い。事実、tomcat、Apache等ミドルを入れ込んだ数種類のAMIを用意して、用途に合わせたサーバーを構築するケースもあります。AutoScalingの際、userdataがLaunch Configurationに組み込まれているので、userdata scriptで修正が生じた場合、Launch Configurationから作り直さなければならない。今後のアップデートを期待したい。

メリット

  • WebUI
  • AutoScaling時の自動適用

デメリット

  • ソースが、S3、githubのみ。
    • gitlab等プライベートリポジトリへは未対応。
  •  Internetへのアクセスが必要
    • S3のみに限定されているVPC Endpointの他のCodeCommit、DynamoDB等へ対応が待たれる。

CodeDepolyは開発環境で使うのいい?

DynamoDB Streams、Lambdaを使ったアーキテクチャーをまとめていければと思います。

次回はEc2を前提としないクラウドネイティブなCDP  10/15になります。

2015年9月18日
から hiruta
New Storage Class – Amazon S3 Standard – Infrequent Access #jawsug #gcpug はコメントを受け付けていません

New Storage Class – Amazon S3 Standard – Infrequent Access #jawsug #gcpug

9/16 2015 、Amazon S3 Storage の低コストストレージクラスとして、「Amazon S3 Standard – Infrequent Access ( 以下Standard-IA) 1」が発表されました。Standard-IAは、頻度に取り出さないデータ、長期間のファイル保存、バックアップ、DR向けとなっています。

auditなどの監査ログ系、アプリログなどの利用と考えられた設計となっています。取り出し料金が$0.01/GBがかかります。

なお、Standard-IAと利用用途が重なるGoogle Nearline Storageについても、同様$0.01/GBがかかります。

ゾーン限定の低価格Storage「Durable Reduced Availability (DRA) Storage」に相当するものはS3にはない。

AWS Google Cloud Platform
Standard Standard-IA Standard Durable Reduced Availability 

Storage

Nearline

Storage

-1TB $0.033 $0.019 $0.026 $0.02 $0.01
49TB $0.0324 $0.019
450TB $0.0319 $0.019
500TB $0.0313 $0.019
4,000TB $0.0308 $0.019
5,000TB $0.0302 $0.019

ネットワーク転送量は別途かかります。クラウドストレージへのアップロードはすべて無料。※GCPの場合、同じリージョン間のGCEとClud Storeageからのデータ取得は無料となっています。

S3の場合、バケットのライフサイクルポリシにTransitionsを設定させる必要があります。オブジェクトを更新してからxx日後にStandard-IAにするようにします。

{
  "Bucket": "xxxx-logs",
  "LifecycleConfiguration": {
      "Rules": [
      {
          "ID": "test_STANDARD_IA",
          "Prefix": "",
          "Status": "Enabled",
          "Transitions": [
          {
             "Days": 30,
             "StorageClass": "STANDARD_IA"
          }
          ]
       }
      ]
   }
}
aws s3api put-bucket-lifecycle-configuration --cli-input-json file://s3_standard_ia_lifecyclepolicy_config.json

AWS CLIは1.8.6で対応しています。

screencapture-aws-amazon-com-releasenotes-CLI-7507092461233524-1442623908846

リリース内容

1 https://aws.amazon.com/jp/about-aws/whats-new/2015/09/announcing-new-amazon-s3-storage-class-and-lower-glacier-prices/

2015年9月15日
から hiruta
JAWS-UGコンテナ支部vol.2 に参加しました。 #jawsug #jawsug_ct はコメントを受け付けていません

JAWS-UGコンテナ支部vol.2 に参加しました。 #jawsug #jawsug_ct

昨日、AmazonにてJAWS-UGコンテナ支部に参加しました。

ECSのサービス担当者によるAmazon ECS Case Study and Use Case

コンテナ

利用率の監視、モニタリングの監視が必要。セキュリティも。

コンテナの状態(Runningしているのか、Stoppingしているか)

コンテナ、クラスタが多くなると、管理も大変になる。ここで、AmazonECS、Kubernetes(Google Container Engine)が必要に。

AmazonECS

クラスタの中で複数のジョブスケジューラを起動できる。他のAWSサービス(EBS、ELB、Cloudformation等)との連携が可能。

シンプルなAPI

DockerHubに登録されているDocker イメージをpull、runするので、pullするのに時間がかかる、DockerHubにイメージを置くのがセキュリティ的に二の足を踏む場合も。

Google Container Registry に相当するサービスが望まれる。あと、コンフィグがjsonフォーマットだけでなく、yamlでも記載できれば。

ユースケース

バッチジョブ

マルチスケジュール機能を活用してバッチ処理に最適。

http://thinkit.co.jp/story/2015/04/10/5855

継続的インテグレーション

immutable infrastrure。サーバー使い捨て。コンテナの起動の高速な点を活用。

分散アプリケーション、マイクロサービス

MVCモデルでWebアプリケーションを開発デプロイすると規模も大きくなる。この反面、1 functionにサービス提供するのにコンテナには最適と考える。

IoT向けのサーバリソースにdockerも選択肢の1つになるのか。

PaasS。マルチテナントに適用しやすくなる。

IMAG0395

cloudpack 鈴木様のスライドより

すべてのインスタンスで動かしたいコンテナがあればAmazonECS Taskで動かせる読み物はこちら。

https://aws.amazon.com/jp/blogs/compute/running-an-amazon-ecs-task-on-every-instance/

EC2→ECS

EC2の資源をそのまま載せ替えることもできるが、2-Tier アーキテクチャで作り直すのがいい。

コンテナはSierの点から運用保守とか考えると導入しずらいのも事実。

Blue-Green Deployment with ECS and monitoring by はてな

ECSでBlue-Green deploymentを行うとすると、Taskのhost portをずらす、Delete/CreateLoadBalancerListenerがアトミックでないので、一時的に紐付けいているものがいなくなることも。この点、HA Proxyで解決できること

モニタリングは、ベーシックな監視はcgroup。詳細は、 https://docs.docker.com/articles/runmetrics/

 

docker in docker 。コンテナの中で、コンテナの話も。docker in dockerは正直実運用には。。。

https://blog.docker.com/2013/09/docker-can-now-run-within-docker/

https://github.com/tehranian/dind-jenkins-slave

docker in dockerとjenkins (Ci)との連携も

https://github.com/jpetazzo/dind

 

2015年9月13日
から hiruta
Datadogで、fluentd、nginxも監視してみました。 はコメントを受け付けていません

Datadogで、fluentd、nginxも監視してみました。

Datadogで、Fluentd、nginxについても監視が可能。

dd-system

Nginxのモジュールngx_http_stub_statusが有効である必要があります。組み込まれているかどうかは、nginx -Vで確認が可能です。

/etc/nginx/conf.d/virtual.conf

location /nginx_status {
stub_status on;
access_log off;
}

datadogの設定ファイルを作成します。.exampleでサンプルがおいてあるので、コピーして作成すればstatus urlを変更すれば完了。

/etc/dd-agent/conf.d/nginx.yaml


init_config:

instances:
# For every instance, you need an `nginx_status_url` and can optionally
# supply a list of tags. This plugin requires nginx to be compiled with
# the nginx stub status module option, and activated with the correct
# configuration stanza. On debian/ubuntu, this is included in the
# `nginx-extras` package. For more details, see:
#
# http://docs.datadoghq.com/integrations/nginx/
#

- nginx_status_url: http://localhost/nginx_status/

dd-nginx

/etc/td-agent/td-agent.conf


<source>
type monitor_agent
bind 0.0.0.0
port 24220
</source>

<match *>
id plg1
type forward
<server>
host localhost
</server>
</match>

設定を反映するには、fluentdを再起動します。

systemctl restart td-agent

下記コマンドで取得できるようになれば設定が反映されています。

curl -s http://127.0.0.1:24220/api/plugins.json

次に、datadogの設定ファイルを作成します。nginxと同様exampleからコピーでほぼ完了。

/etc/dd-agent/conf.d/fluentd.yaml


init_config:

instances:
# Every instance requires a `monitor_agent_url`
# Optional, set `plugin_ids` to monitor a specific scope of plugins.
- monitor_agent_url: http://localhost:24220/api/plugins.json
plugin_ids:
- plg1
# Optional, set 'tag_by' to specify how to tag metrics. By default, metrics are tagged with `plugin_id`
#- monitor_agent_url: http://example.com:24220/api/plugins.json
# tag_by: type

dd-fluentd

最後に、datadogのagentを再起動します。

sytemctl restart datadog-agent

設定が反映されているか下記コマンドで確認できます。

dd-agent info
 fluentd
-------
- instance #0 [OK]
- Collected 3 metrics, 0 events & 2 service checks

nginx
-----
- instance #0 [OK]
- Collected 7 metrics, 0 events & 2 service checks

それ以外にも、RabbitMQ、Cassandra、HA Proxy等監視できるプロダクトが豊富になっています。
 

2015年9月6日
から hiruta
Cassandra Meetup Tokyo 2015, Summerに参加してきました。 #cassandrameetupjp はコメントを受け付けていません

Cassandra Meetup Tokyo 2015, Summerに参加してきました。 #cassandrameetupjp

9月4日、Yahoo! Japanの方でCassandra Meetup Tokyo 2015が行われました。

Cassandraは、NoSQLの技術になり、DynamoDB、Google BigTableの仲間に入ります。

Apache Sparkと組み合わせることで、強力な分析基盤を構築することも可能。

Cassandra Meetup Tokyo 2015, Summer with Apache Cassandra Chief Evangelist, Patrick McFadin

Cassandra は、マスターレス、peer-to-peerで稼働するので、SPOFになり得ない、耐障害性にも優れています。

Wather Stationから気象データを収集するユースケースを話されましたが、Cassandraは、IoT deviceのデータ収集にも使用可能。

Apache Sparkと組み合わせられる。Apache Sparkは、In-Memoryで高速でデータ分析が行える特徴を持っており、Spark Streaming、SQL、機械学習(Machine Learning)、GraphXのコンポーネントもあります。

data processingを聞くと、Google Dataflowが思い浮かんだ。ClouderaがGoogle DataflowをSparkに統合する計画も。

http://jp.techcrunch.com/2015/01/21/20150120google-partners-with-cloudera-to-bring-cloud-dataflow-to-apache-spark/

Partition and Token Range

Cassandra dataをスキャンするには、token ringを使って、マルチノードにアクセスする。

Cassndaraから抽出したデータをCassndaraに書き出すことも。

spanBy

groupByより効率良くグルーピングできる。

Cassandraとsparkを使った yahooの事例

50を超えるyahooのサービスで利用されていること。

StorageにSSDを利用することで、QPS 6倍、レイテンシ1/10と性能向上が図れる。

Sparkはデータの可視化に。Sparkは、In-memoryで高速ではあるが、hadoopオーバーヘッド、HDFSの点でも、hadoopより高速と言える。

MySQLで4,000万レコードの更新がある場合、レプリケーション遅延が発生していた。

RDB系だとトランザクション量が多いとレプリカ遅延(RepliaLag)が発生する。トランザクション量が多い場合、NoSQL系が。

BlockTransferServiceが現状SSLされていないことも。

CyberAgentでの事例

Cassandraの導入。

jenkins、ansible + SensuでCassandraを使った運用。Masterレスなので、SPOFがない、ノードを増やすことで、スケールアウトも。

cpu/mem/nw/latency/fd はもちろん、jvmのGC、Cassandra_Status、Cassandra clusterのheathの監視を行っている。

repair & cleanupを7日。NW断があった障害に関しても、データロストはなかった。

書き込みを一端止めて、snapshotを取得することで、PITRに近いこともできるのでは。組み込まれることを期待。

Cassandra Tools

EC2でCassandraを使う場合、Ec2MultiRegionSnitch、 Ec2Snitchを確認。

  •  cassandra-stress
    • Cassandra負荷掛けツール。read/writeで負荷を掛けることが可能。
  • cassandra-stressd
    • 長時間負荷をかける場合は、こちら
  • cassandra.in.sh
  • json2sstable
  • sstable2json
    • deprecatedされており、Cassandra 3.0では廃止予定
  • sstablelevelreset
  • sstableofflinelevel
  • sstablerepairreset
  • sstablesplit
  • token-generator
    • 最適なtokenを算出してくれる

AWS上でCassandra環境構築する場合は、 cassandgo

参加者に、enterprise版のCassandraが入った2Gのusbメモリ。

P1000410

 

http://www.infoq.com/jp/news/2014/11/netflix-cassandra

http://www.infoq.com/jp/news/2014/11/netflix-cassandra

2015年8月30日
から hiruta
GKEのコンテナをDatadogで監視 はコメントを受け付けていません

GKEのコンテナをDatadogで監視

3-datadog-docker

※glcoud compoents updateでCloud SDKを最新にしておきます。

GKEクラスタを作成

 

gcloud container clusters create test-cluster --zone asia-east1-a --machine-type g1-small --num-nodes 1 --network stage-network

指定しないと、n1-standard-1とクラスタノード数3で起動します。

gcloud containers コマンドのデフォルトクラスタを「test-cluster」に設定します。

gcloud config set container/cluster test-cluster

kubectlとの連携

gcloud container clusters get-credentials

作成したクラスタの確認

gcloud container clusters describe test-cluster --zone asia-east1-a

作成するコンテナ用jsonを作成します。jsonだけでなく、yamlでも作成可能です。

{
 "kind": "Pod",
 "apiVersion": "v1",
 "metadata": {
 "name": "nginx",
 "namespace": "default"
 },
 "spec": {
 "containers": [
 {
 "name": "nginx",
 "image": "nginx",
 "imagePullPolicy": "Always",
 "ports": [
 {
 "containerPort": 22,
 "name": "ssh",
 "protocol": "TCP"
 }
 ]
 }
 ]
 }
}

Pods (Containers)を作成します。

kubectl create -f nginx.json
kubectl describe pods nginx

コンテナを削除する場合は、以下コマンドで完了。

kubectl delete -f nginx.json

作成したコンテナを確認します。Node Clusterも確認できます。Datadog Agentをインストールする際、sshログインする必要があります。

kubectl get pods nginx -o wide
NAME READY STATUS RESTARTS AGE NODE
nginx 1/1 Running 0 -340s gke-test-cluster-919cf59d-node-zgrc

Containerが起動すれば、Runningになるかと思います。内部的にイメージになんらか問題が生じて、Containersが起動できなくなっているケースもあります。Node Cluseterにログイン後、docker ps -aで、Containerは確認できます。(Datadogを使えば、コンテナの状態も確認できると思われます。)

Datadogに登録

Datadogの登録は割愛します。


 

ホストサーバーにDatadog Agentをインストール

Datadogのダッシュボードにある左メニューのIntegrationのAgentを選んで、「Debian」を選択します。 すると1行ペラっとコマンド出てきますから、それをコピーします。

DD_API_KEY=XXXXXXXXXXXXXXXXXXXXXXX bash -c "$(curl -L https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh)"

 

ホストサーバーからDocker Agentをインストール

IntegrationのAgentを選んで、「CoreOS」を選択します。

docker run -d --name dd-agent -h `hostname` -v /var/run/docker.sock:/var/run/docker.sock -v /proc/mounts:/host/proc/mounts:ro -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro -e API_KEY=XXXXXXXXXXXXXXXXXXXXXXX datadog/docker-dd-agent

Docker 用監視ファイルの設定

サンプルのdocker用yamlファイルが置かれているので、リネームして、agentを起動します。


cp /etc/dd-agent/conf.d/docker.yaml.example /etc/dd-agent/conf.d/docker.yaml
dd-agent start