zabbix_senderで複数の値を一括登録する
Zabbixは非常に便利で、Agentでの監視の他に自身で取得可能なあらゆる情報をZabbix senderを使用してサーバへ送信することが可能です。
Zabbix_Senderの使い方
$ zabbix_sender -z zabbix -s "Linux DB3" -k db.connections -o 43
z - Zabbix サーバのホスト(IP アドレスでの指定でも可) s - 監視対象のホスト名 (Zabbix フロントエンドで登録されたもの) k - アイテムキー o - 送信する値
Zabbix_Senderで複数の値を投入する
上記の例だと一つのkeyに対して値を投入していますが、複数のkeyを扱うことが可能です。監視対象側の負荷を軽減することができるので非常に重宝します。
ファイルからデータを投入する
$ zabbix_sender -z 127.0.0.1 -i /tmp/traptest.txt Info from server: "Processed 250 Failed 0 Total 250 Seconds spent 0.002668" Info from server: "Processed 50 Failed 0 Total 50 Seconds spent 0.000540" sent: 300; skipped: 0; total: 300
-iでファイルを指定します。ファイルの中身はシンプルに以下のような内容でOKです。
<hostname> <key> <value> <hostname> <key> <value> <hostname> <key> <value> <hostname> <key> <value>
直接データを投入する
ファイルに書き出す必要がない場合は以下の通り直接コマンドラインから複数のデータを扱うことも可能です。
$ echo -n -e '<hostname> <key> <value>\n<hostname> <key> <value>' | zabbix_sender -z 127.0.0.1 -p 10051 -i - info from server: "processed: 2; failed: 0; total: 2; seconds spent: 0.000066" sent: 2; skipped: 0; total: 2
他にもzabbix_senderとディスカバリを組み合わせることでitemを動的に作成するという小技もありますので、時間を見つけて書いておきたいと思います。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
改訂版 Zabbix統合監視実践入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plus)
- 作者: 寺島広大
- 出版社/メーカー: 技術評論社
- 発売日: 2014/06/17
- メディア: 大型本
- この商品を含むブログ (1件) を見る
サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
- 作者: 鈴木健太,吉田健太郎,大谷純,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/08
- メディア: 大型本
- この商品を含むブログ (1件) を見る
haproxyのステータス確認
haproxyのステータス確認方法をいつも忘れてしまうのでメモ代わりに書いておきます。
haproxyのsocketをcatするsocat
コマンドを使います。
以下のように書くことで8080番への入力を標準出力に書き込むことができます。 簡単dす。
$ socat tcp-listen:8080 stdout
haproxyではechoを使って取得したいログの種別を指定します。 まずはバージョン情報など基本的な情報を取ってみます。
root@gw01:~# echo "show info" | socat unix-connect:/etc/haproxy/sock stdio Name: HAProxy Version: 1.4.24 Release_date: 2013/06/17 Nbproc: 1 Process_num: 1 Pid: 24498 Uptime: 0d 0h08m59s Uptime_sec: 539 Memmax_MB: 0 Ulimit-n: 4013 Maxsock: 4013 Maxconn: 2000 Maxpipes: 0 CurrConns: 1 PipesUsed: 0 PipesFree: 0 Tasks: 2 Run_queue: 1 node:gw01 description:
コマンド一覧をhelpで取ってみました。
clear counters : clear max statistics counters (add 'all' for all counters) help : this message prompt : toggle interactive mode with prompt quit : disconnect show info : report information about the running process show stat : report counters for each proxy and server show errors : report last request and response errors for each proxy show sess [id] : report the list of current sessions or dump this session get weight : report a server's current weight set weight : change a server's weight set timeout : change a timeout setting disable server : set a server in maintenance mode enable server : re-enable a server that was previously in maintenance mode
backendのステータスなどはshow stat
で確認可能です。
root@gw01:~# echo "show stat" | socat unix-connect:/etc/haproxy/sock stdio # pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt, 07625016-88cc-4533-a0b0-cd006b54c110,FRONTEND,,,0,0,2000,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,0,0,0,,,,,,,,,,,0,0,0,,, 2c8ff70e-1345-4642-8689-1ce7d74506a8,6f37e25b-713e-4c31-8671-aec5c23a878e,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,1278,0,,1,2,1,,0,,2,0,,0,L4OK,,3,,,,,,,0,,,,0,0, 2c8ff70e-1345-4642-8689-1ce7d74506a8,BACKEND,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,UP,1,1,0,,0,1278,0,,1,2,0,,0,,1,0,,0,,,,,,,,,,,,,,0,0,
こんな感じで必要な情報だけ引っ張ります。svname
とstatus
をピックアップしています。
root@gw01:~# echo "show stat" | socat unix-connect:/etc/haproxy/sock stdio | grep -v -e '^#\|^$' | cut -d ',' -f 2,18 --output-delimiter=':' FRONTEND:OPEN 6f37e25b-713e-4c31-8671-aec5c23a878e:UP BACKEND:UP
- 作者: みやたひろし
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/10/05
- メディア: オンデマンド (ペーパーバック)
- この商品を含むブログを見る
- 作者: 編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2015/06/16
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: みやたひろし
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/06/04
- メディア: 大型本
- 購入: 4人 クリック: 204回
- この商品を含むブログ (4件) を見る
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
売り上げランキング: 111,502
sflowもFluentd+Elastic Searchに入れて可視化してみた
以前にNetflowについて書いたのですが、sflowもelastcsearchに入れたいなと思って色々調べてみました。ちなみに前回からkibanaのバージョンをあげましてkibana 4はこんな画面になってます。検証用のデータですが気持ち的にIPアドレスは隠しました。
ホワイトを基調のデザインに一新されており個人的には好感が持てるデザインになっています。機能的にはグラフオプションが強化されて実現できることが多くなっています。
- kibana 4になり、対応するElastic Searchのバージョンも1.4以降に変更になっているため注意が必要です
調査フェーズ
logstashを使ってElastic Searchへ入れるパターン
まず、調べてたところlogstashで以下のような方法があるようなので少し調査。
https://github.com/NETWAYS/sflow
Tiny sflow collector and parser script based on eventmachine. It listens for sflow v5 samples, parses them and sends it to logstash.
インストール自体は楽そうですが、issuesのやりとりやflow sourceを都度設定ファイルやhostsに書かなければいけない(っぽい)点とsnmpがなぜか絡んでくるのがどうしてもすっきりせずパスしました。
(できれば設定はtd-agent.confで統一したいという思いもありすいません)
sflowをnetflowに変換してあれこれするパターン
世の中には便利なものがあるもので、今回sflowtool
を使うことにしました。結局、NETWAYS/sflowのissueでもsflowtoolをwrapperとして使用する方法について記載がありました。
sflowtoolは名前の通りsflowを扱うためのツールなのですが、任意のポートで受信し他のコレクタに渡したりcsvで吐き出したり、pcap形式に落としたり、あと今回重要なnetflowに対応したコレクタにフローを飛ばすことも可能です。
ということで、sflowtool -> fluentd -> elastic searchの流れでデータを注入することにしました。
sflowtoolインストール
最新版はgithubにあります。Versionは3.28でした。
git clone https://github.com/kplimack/sflowtool.git cd sflowtool/
cloneしたら、configure / make / make installしてください。
パスが通っていれば$ sflowtool
で起動します。
参考)以下のログが出た人へ
v6 socket() creation failed, Address family not supported by protocol
デフォルトでlisten on both IPv4 and IPv6 socketsなので、ipv6をdisableにしている人は-4
オプションを使ってください。
sflowを受信してみる
起動して受信すると以下の項目が値と共に出力されます。
startDatagram datagramSourceIP datagramSize unixSecondsUTC datagramVersion agentSubId agent packetSequenceNo sysUpTime samplesInPacket startSample ---------------------- sampleType_tag sampleType sampleSequenceNo sourceId meanSkipCount samplePool dropEvents inputPort outputPort flowBlock_tag flowSampleType headerProtocol sampledPacketSize strippedBytes headerLen dstMAC srcMAC decodedVLAN decodedPriority IPSize ip.tot_len srcIP dstIP IPProtocol IPTOS IPTTL TCPSrcPort TCPDstPort TCPFlags endSample ---------------------- endDatagram =================================
NetFlowに飛ばしたいのであれば以下のオプションを使います。
To forward Cisco NetFlow v5 records to UDP port 9991 on host collector.mysite.com, the options would be: % ./sflowtool -p 6343 -c collector.mysite.com -d 9991
Fluentd(td-agent)で受けてstdoutに出るようtagをdebugにしてみました。一回sflowtoolが受信するのでhostが127.0.0.1になってしまうのが残念です。ただ、本来のNetflowへ変換という意味ではVersion 5へしっかりと変換してくれました。
2015-09-02 23:23:10 +0900 debug.netflow: {"version":"5","flow_seq_num":"19","engine_type":"0","engine_id":"0","sampling_algorithm":"0","sampling_interval":"0","flow_records":"1","ipv4_src_addr":"1.1.4.1","ipv4_dst_addr":"1.1.7.1","ipv4_next_hop":"0.0.0.0","input_snmp":"1026","output_snmp":"1026","in_pkts":"32768","in_bytes":"1507328","first_switched":"2015-09-02T23:23:10.000Z","last_switched":"2015-09-02T23:23:10.000Z","l4_src_port":"52193","l4_dst_port":"80","tcp_flags":"16","protocol":"6","src_tos":"0","src_as":"0","dst_as":"0","src_mask":"0","dst_mask":"0","host":"127.0.0.1"}
ここからのElastic Searchへの挿入は前回と同様です。
その他
- Elastic Search pluginで
@timestamp
と_source
は挿入されるのでkibanaから見ると前回と同じ仕様です - sflowtoolが増えましたが、既存のFluentdの設計を踏襲できるのでシンプルで分かりやすいと思っています
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
- 作者: 鈴木健太,吉田健太郎,大谷純,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/08
- メディア: 大型本
- この商品を含むブログ (1件) を見る
高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)
- 作者: Rafal Kuc (lにストローク符号、cにアクサン・テギュ付く),Marek Rogozinski (nにアクサン・テギュ付く)
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/03/25
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
Network機器をAnsibleで操作(?)してみた
RAWコマンドならいけるよねということで夜な夜な試してみましたメモです。今回、showコマンドやwr memなどしか試していないです。個人的には設定投入はエラー処理とか考えると他に任せたいなと思います。
Network機器でAnsibleの環境
新たに準備するのが面倒だったので以前に使ったvirtual boxで。古くてすいません。 opensshのバージョンは気にした方が良いです。理由は後述します。
$ ansible --version ansible 1.9.1 $ cat /etc/redhat-release CentOS release 6.5 (Final) $ sudo yum list installed | grep openssh openssh.x86_64 5.3p1-112.el6_7 @updates
Ansible設定
SFTPが開いていないデバイスのために念のためscp_if_ssh
をTrue
にしておきます。
セッションは1分あれば十分と判断し、60s
にしています。
$ more ansible.cfg [defaults] host_key_checking = False transport=ssh log_path=ansible.log [ssh_connection] scp_if_ssh=True ssh_args = -o ControlMaster=auto -o ControlPersist=60s
インベントリはメーカーごとに分けています。ここは環境により分けて頂ければと思います。
$ more hosts [all:vars] ansible_ssh_user=<username> ansible_ssh_pass=<password> [cisco] 1.1.1.1
冒頭に書いた通りrawモジュールを使ってコマンドを打ちます。 show runを出力するtaskと出力をローカルに保存するtaskを作っています。
$ more show-run.yml --- - hosts: cisco gather_facts: no tasks: - name: sh run raw : "show run" register: show_run - name: sh run output local_action: shell /bin/echo "{{ show_run.stdout }}" > /home/komei/ansible- test/sh_run_{{ inventory_hostname }}.txt
$ ansible-playbook show-run.yml -i hosts PLAY [cisco] ****************************************************************** TASK: [sh run] **************************************************************** ok: [1.1.1.1] TASK: [sh run output] ********************************************************* changed: [1.1.1.1 -> 127.0.0.1] PLAY RECAP ******************************************************************** 1.1.1.1 : ok=2 changed=1 unreachable=0 failed=0
$ ls -la -rw-rw-r-- 1 komei komei 689 Aug 24 23:55 sh_run_1.1.1.1.txt
1つイケてないのがインデントがなくすべて前詰めになってしまう点です。。copyコマンド入れてもプロンプトが出るし何かうまい方法ないかな。。 スイッチ側の設定を書いてないですが、Ansibleなので基本的にSSH開けておけばOKです。たた、個人的にはprivilegeレベルを下げたユーザでアクセスさせたいため、show runではなくwr mem & show confで動かすつもりです。↓みたいな感じ。
$ more show-conf.yml --- - hosts: cisco gather_facts: no tasks: tasks: - name: wr mem raw : "wr mem" - name: sh conf raw : "show conf" register: show_conf - name: sh conf output local_action: shell /bin/echo "{{ show_conf.stdout }}" > /home/komei/ansible -test/sh_conf_{{ inventory_hostname }}.txt
その他
エラーが出た時の対処
文言通りsshpassを入れてください
TASK: [sh run] **************************************************************** fatal: [1.1.1.1] => to use the 'ssh' connection type with passwords, you must install the sshpass program $ sudo yum install sshpass
opensshのバージョンによってはparamikoを使ってしまってtty周りで苦戦するかもしれません。
http://docs.ansible.com/ansible/intro_getting_started.html
However, when using Enterprise Linux 6 operating systems as the control machine (Red Hat Enterprise Linux and derivatives such as CentOS), the version of OpenSSH may be too old to support ControlPersist. On these operating systems, Ansible will fallback into using a high-quality Python implementation of OpenSSH called ‘paramiko’.
使いどころ
全台のwr memくらいなら有りかなくらいです。バージョンとかはSNMPでGETすれば良いと思いますし。ただ、RAWコマンドがうまく通らないメーカーもあったので、うーんという感じです。もう少し頑張ればわかるかな。。バックアップの仕組みはインデントの件もあるので、copyコマンドで吐き出した方が良いと思います。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 若山史郎
- 発売日: 2014/07/30
- メディア: Kindle版
- この商品を含むブログ (2件) を見る
- 作者: Lorin Hochstein
- 出版社/メーカー: O'Reilly Media
- 発売日: 2015/04/29
- メディア: Kindle版
- この商品を含むブログを見る
chefのdata_bagを暗号化する
chef serverだとdata baseのcreate時に--secret-file オプションで暗号化が簡単に可能ですが、chef solo / knife solo環境data bagでも実はknife-solo_data_bagを使うと簡単に実現可能です。
knife-solo_data_bagインストール
gem install knife-solo_data_bag
or
Gemfiles & bundle install
使い方などは以下を参照すると
- usage & Version Support
https://github.com/thbishop/knife-solo_data_bag
秘密鍵の作成
今回、RSAの2048bitで作成します。
$ openssl genrsa -aes256 2048 | tr -d '\r\n' > .chef/data_bag_key
knife設定とその他
--secret-file .chef/data_bag_keyでも可能ですが、毎回指定していると忘れるので書いておきます。
$ vim .chef/knife.rb encrypted_data_bag_secret ".chef/data_bag_key"
$ vim ~/.bash_profile export EDITOR='vim'
knife soloでdata bagの作成
作成はknife solo data bag createです。
$ knife solo data bag create s3 test { "id": "test", "keys": { "key_1": "12345", "key_2": "54321" } }
作成されたデータを覗くとdata部分が暗号化されているかと思います。 ファイルはeditor経由ではなくknife solo editで編集します。
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)
- 作者: 吉羽龍太郎,安藤祐介,伊藤直也,菅井祐太朗,並河祐貴
- 出版社/メーカー: 技術評論社
- 発売日: 2014/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (15件) を見る
- 作者: 澤登亨彦,樋口大輔,クリエーションライン株式会社
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2014/04/25
- メディア: 大型本
- この商品を含むブログ (1件) を見る
Aerospike Deep Driveに参加してきた
参加メモです。6/24(水) 19:00〜22:00。
個人的にはpartition mapの話が勉強になりました。Aerospikeは構築するだけであれば非常に簡単でドキュメントにインフラ周りの仕組みがなかなか記載されていないので、裏側を知れたのは非常に嬉しいです。
Aerospikeと他KVSとの違い、適用分野等
- 導入事例
- 導入時に検討した他のKVS
- 導入して気づいたこと
IDSyncサービス
- 自社IDと他社IDのマッピング
属性データの加工
ID Syncサービスとは
- マッピングテーブルを生成
- アンケートで特定の解答をした人に広告配信
自社サイトに訪問した人にメール広告を配信
システム
- ELB + Nginx + uWSGI
- バックエンドにaerospike
- 平均応答速度は1ms
- ピーク時で1000req/s程度
主キーが自社ID、他社IDを主キーとしたものを保持
様々な属性情報を、異なるソースから取得
- 保持している属性情報を人が理解できるように
- 基盤にaerospike
- cookie IDを元に様々なデータを保持
- 要素ごとに個別のsetを保持(useragent, IP, company, ...etc)
他のKVSとの比較
DynamoDB
- 費用面がネック
- キャパシティを超えたリクエストがロスト(キューイングなし)
- 10万read/sで130万/月、10万write/sで650万/月
Redis(ElasticCache)
- 容量制限あり(最大240GB)
- 到達した場合に代替手段がないのでスケールしない
Cloud Bigtable
- GCPにしないとレイテンシが発生する
- 応答速度がAerospike比で約5〜10倍(らしい)
導入して気づいたこと
- clientが高機能
- レコードがどのノードに配置されているか主キーのハッシュ値で把握している
- コネクション取得時にテーブルを取得する
マッピングテーブルはノードの削除・追加時に更新される
Clientもパワーが必要
- 高多重度でリクエストを行う必要あり
1リクエスト1msで3.6億レコードを取り出す
メモリの使用量が大きい
SSDのみの利用でも意外とメモリを利用する
- インデックスがメモリ展開される
- 1レコードにつき64バイト
Nmaespaceが分割しにくい
SSDを使用する場合、ブロックデバイス単位でしかNamespaceを分けることができない
Queryの制約
- SQLライクな記述でレコードを参照するこも可能だが・・・
- 指定したサーバで処理が走る(クライアント側ではない)
- 並列実行ができない
- バックアップのQuery扱い
mysqldumpの様なコマンドがある。平文。データ量と時間に注意
その他 雑感
- インメモリだと特に速い
- 設定項目がほぼないので構築が楽
ドキュメントにない機能がライブラリにある(ソースコードみよう!)
まとめ
- Aerospikeの速度が必要なケースってあまり多くなさそう
- マッチしそうなケース
- データ量の見積もりが難しい場合
- 時間あたりのリクエスト数が膨大な場合
- リソースの見積もりが難しい
新機能を使ってみて
クライアントライブラリ
新機能の実装優先度
scalaもcommunity Labsにあるよ
大体の使い方を知るにはサンプルプログラムを読む/実行するのがよい
- vagrantで入れてAMCでアクセスしてみよう(ここまで30分)
- GitHubで公開されているclientライブラリにもexamplesが同梱
充実度はJavaが一番
基本の保存と検索
- client.put / client.get
- サポートしている型はシンプル
- list / mapはgetlist/getmapはないget objectでダウンキャスト
- ver3からlist / set / map / stackをサポート。LDTS
LargeListは昇順でソートされている
limitation
- ソートは昇順
- write block size設定によって1要素の容量が制限される
- 1Mbなら200kb / 128kbなら30kb
- add_all(), udate_all()は1GBまで
- XDRはLDT対象外
- aqlで内容を確認できない
その他
- LDTのデータは1つのサーバノードで保存されクラスタ内に分散しない
- TTLはRecord単位
- LDTの堀はluaを使うのでCPUを消費する
LDT * luaはサンプル少なくて苦労する
OSS化
- あまり使われてない機能・環境を使う場合はEnterprise Editionを推奨
Aerosparkあるよ
Node.jsクライアントを半年間、使ってみて
− 運用のし易さで選定 - クラスタ構成、パフォーマンス、サーバ台数削減 - メモリリーク問題 - heapdump / tcp connection? /clinen closeで治るか? -> 治らず - binの文字長 - 感想:サーバサイドの運用が楽、クライアントは・・・
マイグレーション
partition map
- クラスタ内のデータを4096個に分割したもの
- partitionはレコードを均等に入れる4096個のバケツ
- キーのハッシュの先頭12bitを使用
- パーティションをサーバに均等に分割
- 各サーバのMACとpartitionIDを使って各ノードの順番を決める。これをパーティションマップ。
- partition mapは左からreplication factorに従い選択される
- clientからのアクセスは1ホップ
- オートシャーディング、オートバランシング
ノード追加
- ノード追加
- Gossipプロトコルで伝達。全ノードのノードリストができてからMap作成に移る
- patition mapが更新される。計算上既存ノードの順序は変わらず新規ノードが入ってくる(マイグレーション処理が少ない)
- 新規ノードにデータがあるノードからコピーされる
- 新規ノードがslaveであればClientはMasterへ、新規ノードがMasterならclientはコピーが終るまではslaveへ。2台同時追加でmaster/slave両方がコピー中の場合はmapの右へ
- slaveで受けているときはコピーを続けつつmasterのjournalへ書き込む
最後にjournalをflashする
通常時はmaster/slaveに書き込んでACK, 非同期でSSDへFlash。reptication factor 3だと3台書き込めてからレスポンス。
- migration走って容量減った? -> partition mapでslave以下に降格したデータが消える。reprication factorは3 !?
- 2TBで3台->4台にしたときに18時間
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
- 作者: 本橋信也,河野達也,鶴見利章
- 出版社/メーカー: リックテレコム
- 発売日: 2014/03/06
- メディア: Kindle版
- この商品を含むブログを見る
データベース徹底攻略 (WEB+DB PRESS plus)
- 作者: 松信嘉範,羽生章洋,ミック,奥野幹也,松下雅和,桑野章弘,青木峰郎,ひろせまさあき,小林篤,島田慶樹,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/15
- メディア: 大型本
- この商品を含むブログ (3件) を見る
OpenvSwitch関連コマンドのチートシート的な何か
まずOpenvSwitchに関するコマンドは大きく4つです。観点としてはOpenStackで使ったときにトラブルシューティングで使いそうなものが多いかもしれません。
Neutronってよくわらかないって人は、以下も参照してみるとイメージが付きやすいと思います。
- ovs-vsctl
- Used for configuring the ovs-vswitchd configuration database (known as ovs-db)
- ovs-ofctl
- A command line tool for monitoring and administering OpenFlow switches
- ovs-dpctl
- Used to administer Open vSwitch datapaths
- ovs−appctl
- Used for querying and controlling Open vSwitch daemons
1. ovs-vsctlコマンド
ovs-vsctlって何?
マニュアルにも「ovs-vsctl connects to an ovsdb-server process that maintains an Open vSwitch configuration database.」の記載がある通りovsdb-serverプロセスを操作するためのコマンドです。ovs-vsctlを叩いた時の内部的な動きはざっくり以下の通りです。
ovs-vsctl -> ovsdb-server <-> ovs-vswitchd <-> openvswitch_mod -> ovsdb
※ openvswitch_mod(datapath)はパケットの転送処理を行うカーネルモジュールです。
参考までにプロトコル番号です。
management(OVSDB) Channel TCP/6632 Openflow channel TCP/6633
せっかくなのでkiloのレポジトリから取ってきました。バージョンは以下の通りです。
[komei@localhost ~]# ovs-vsctl -V ovs-vsctl (Open vSwitch) 2.3.1 Compiled Dec 26 2014 15:35:14 DB Schema 7.6.2
ovsdb-serverはデフォルトで/var/run/openvswitch/db.sockファイルを使用します。このファイルをコピーすれば設定情報は復元できます。
[komei@localhost ~]# ps aux | grep open root 21413 0.0 0.5 46488 2528 ? S< 6月17 0:12 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor root 21426 0.0 7.0 268568 35180 ? S<Ll 6月17 4:23 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
ovs-vsctlのオプション
databaseファイルを指定
[komei@localhost ~]# ovs-vsctl --db=unix:/var/run/openvswitch/db.sock show ed7907f7-314f-465d-8971-e6a8792c9dfd Bridge br-int Port "qr-peer2" tag: 2 Interface "qr-peer2" Port br-int Interface br-int type: internal Port "vm-peer1" Interface "vm-peer1" Port "vm-peer2" tag: 2 Interface "vm-peer2" Port "ns-peer2" tag: 2 Interface "ns-peer2" Port "qr-peer1" Interface "qr-peer1" Bridge br-ex Port "qg-peer1" Interface "qg-peer1" Port "qg-peer2" Interface "qg-peer2" Port "pub-peer1" Interface "pub-peer1" Port br-ex Interface br-ex type: internal ovs_version: "2.3.1"
外部のovsdbへ接続
ovsdbへの外部アクセスに備えてlistenする
- ptcp:port[:ip]
- pssl;port[:ip]
openvswitchのsyslog
--no-syslogでsyslogへの出力を制御できる
デフォルトでは以下の通りsyslog形式でログが出力されています。
[komei@localhost ~]# cat /var/log/messages | grep ovs-vsctl Jun 23 00:01:26 localhost ovs-vsctl: ovs|00001|vsctl|ERR|'list' command requires at least 1 arguments
他には以下のオプションもあります。
--log-file[=file]
デフォルトでは/var/log/openvswitch/ovs-vsctl.logです
その他の便利なオプション
--dry-run
--timeout=secs
--syslog-target=host:port
ovs-vsctlの確認コマンド
Bridgeのリスト
[komei@localhost ~]# ovs-vsctl list-br br-ex br-int
Bridgeの存在確認
[komei@localhost ~]# ovs-vsctl br-exists br-ex1 [komei@localhost ~]# echo $? 2 [komei@localhost ~]# ovs-vsctl br-exists br-ex [komei@localhost ~]# echo $? 0
Bridgeのリスト確認
[komei@localhost ~]# ovs-vsctl list-ports br-ex pub-peer1 qg-peer1 qg-peer2 [komei@localhost ~]# ovs-vsctl list-ports br-int ns-peer2 qr-peer1 qr-peer2 vm-peer1 vm-peer2
ポートがどのBridgeに接続されているか
[komei@localhost ~]# ovs-vsctl port-to-br pub-peer1 br-ex
OpenFlowコントローラーの確認
[komei@localhost ~]# ovs-vsctl get-controller br-ex
set-controllerもあります。opendaylightのエントリで書いたような記憶もありますが。
蛇足ですがNetFlowやsFlowにも対応しています。あとMirroringやQoS、GREトンネルにも対応しています。
[komei@localhost ~]# ovs-vsctl add-port br0 gre0 --set Interface gre0 type=gre options:remote_ip=1.2.3.4
ovs-ofctl
ovs-ofctlって何?
openvswichのopen flow部分を見るコマンドです。
OpenflowスイッチとしてのBridge確認
[komei@localhost ~]# ovs-ofctl show br-ex OFPT_FEATURES_REPLY (xid=0x2): dpid:00001237cc5df04d n_tables:254, n_buffers:256 capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE 1(qg-peer1): addr:ea:9c:0d:31:eb:4b config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max 2(pub-peer1): addr:82:ca:37:c4:9c:1d config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max 3(qg-peer2): addr:1a:13:3c:79:30:12 config: 0 state: 0 current: 10GB-FD COPPER speed: 10000 Mbps now, 0 Mbps max LOCAL(br-ex): addr:12:37:cc:5d:f0:4d config: 0 state: 0 speed: 0 Mbps now, 0 Mbps max OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0
flowのstatisticsを確認
[komei@localhost ~]# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=488096.484s, table=0, n_packets=48, n_bytes=3800, idle_age=65534, hard_age=65534, priority=0 actions=NORMAL
openvswitch Portのstatistics
[komei@localhost ~]# ovs-ofctl dump-ports br-int qr-peer2 OFPST_PORT reply (xid=0x4): 1 ports port 3: rx pkts=145, bytes=13290, drop=0, errs=0, frame=0, over=0, crc=0 tx pkts=161, bytes=14586, drop=0, errs=0, coll=0
ovs-dpctl
ovs-dpctlって何?
ovs-dpctlはデータパス部分の設定や確認をするコマンドです。
openvswitchのdata path確認
[komei@localhost ~]# ovs-dpctl dump-dps system@ovs-system
openvswitchを通過するflow一覧を表示
- まだ何も表示されない
[komei@localhost ~]# ovs-dpctl dump-flows
- Pingを打って通信を発生させる
[komei@localhost ~]# ip netns exec qpublic ping 192.168.101.12 PING 192.168.101.12 (192.168.101.12) 56(84) bytes of data. 64 bytes from 192.168.101.12: icmp_seq=1 ttl=63 time=0.322 ms 64 bytes from 192.168.101.12: icmp_seq=2 ttl=63 time=0.224 ms
- 再度表示
[komei@localhost ~]# ovs-dpctl dump-flows recirc_id(0),skb_priority(0),in_port(5),eth(src=e2:26:c6:c9:1b:72,dst=26:81:8d:99:47:80),eth_type(0x0800),ipv4(src=192.168.101.200/0.0.0.0,dst=192.168.101.12/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:1, bytes:98, used:0.140s, actions:10 recirc_id(0),skb_priority(0),in_port(7),eth(src=4a:f3:46:10:ec:34,dst=c6:79:ae:27:8e:db),eth_type(0x0800),ipv4(src=192.168.101.12/0.0.0.0,dst=10.0.0.3/0.0.0.0,proto=1/0,tos=0/0,ttl=63/0,frag=no/0xff), packets:1, bytes:98, used:0.140s, actions:9 recirc_id(0),skb_priority(0),in_port(9),eth(src=c6:79:ae:27:8e:db,dst=4a:f3:46:10:ec:34),eth_type(0x0800),ipv4(src=10.0.0.3/0.0.0.0,dst=192.168.101.12/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no/0xff), packets:2, bytes:196, used:0.140s, actions:7 recirc_id(0),skb_priority(0),in_port(10),eth(src=26:81:8d:99:47:80,dst=e2:26:c6:c9:1b:72),eth_type(0x0800),ipv4(src=192.168.101.12/0.0.0.0,dst=192.168.101.200/0.0.0.0,proto=1/0,tos=0/0,ttl=63/0,frag=no/0xff), packets:2, bytes:196, used:0.140s, actions:5
- statisticsを確認
[komei@localhost ~]# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=488404.848s, table=0, n_packets=130, n_bytes=11388, idle_age=0, hard_age=65534, priority=0 actions=NORMAL [komei@localhost ~]# ovs-ofctl dump-flows br-int NXST_FLOW reply (xid=0x4): cookie=0x0, duration=488405.936s, table=0, n_packets=132, n_bytes=11584, idle_age=0, hard_age=65534, priority=0 actions=NORMAL
その他
MACアドレステーブル確認
[komei@localhost ~]# ovs-appctl fdb/show br-ex port VLAN MAC Age 1 0 5e:6e:bb:98:eb:d5 5 2 0 e2:26:c6:c9:1b:72 1 3 0 26:81:8d:99:47:80 1 [komei@localhost ~]# ovs-appctl fdb/show br-int port VLAN MAC Age 2 0 42:8a:36:9d:7d:21 7 1 0 06:b0:47:10:06:32 7 3 2 4a:f3:46:10:ec:34 1
※ Ageはデフォルトで300秒
[komei@localhost ~]# ip netns exec qpublic ip a 15: pub-veth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether e2:26:c6:c9:1b:72 brd ff:ff:ff:ff:ff:ff inet 192.168.101.200/24 scope global pub-veth1 valid_lft forever preferred_lft forever inet6 fe80::e026:c6ff:fec9:1b72/64 scope link valid_lft forever preferred_lft forever
23: qg-veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 26:81:8d:99:47:80 brd ff:ff:ff:ff:ff:ff inet 192.168.101.9/24 scope global qg-veth2 valid_lft forever preferred_lft forever inet 192.168.101.12/32 scope global qg-veth2 valid_lft forever preferred_lft forever inet6 fe80::2481:8dff:fe99:4780/64 scope link valid_lft forever preferred_lft forever
17: qr-veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 4a:f3:46:10:ec:34 brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/8 scope global qr-veth2 valid_lft forever preferred_lft forever inet6 fe80::48f3:46ff:fe10:ec34/64 scope link valid_lft forever preferred_lft forever
21: vm-veth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether c6:79:ae:27:8e:db brd ff:ff:ff:ff:ff:ff inet 10.0.0.3/8 scope global vm-veth2 valid_lft forever preferred_lft forever inet6 fe80::c479:aeff:fe27:8edb/64 scope link valid_lft forever preferred_lft forever
※ qvo, qvb, tapとかが入っているのを確認。
MACアドレスのテーブルサイズ変更
openvswitchで設定できるテーブルサイズ
other_config : mac-table-size: optional string, containing an integer, at least 1 The maximum number of MAC addresses to learn. The default is currently 2048. The value, if specified, is forced into a reasonable range, cur‐ rently 10 to 1,000,000.
現在のテーブルサイズ確認
[komei@localhost ~]# ovs-vsctl list bridge br-int _uuid : 4fc8c288-5a54-41ed-85f4-854eaf1f31fd controller : [] datapath_id : "00008ac2c84fed41" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {} ipfix : [] mirrors : [] name : br-int netflow : [] other_config : {mac-table-size="4096"} ports : [01e94661-0d5d-4154-b931-2f05068de40f, 25f9a4ed-7f73-4069-a9e2-fd67d4b870b4, 9c08bee6-0304-4cb5-82a4-676806f6e94e, d013c5a1-2e70-4e87-8d7a-5759b4e9cd22, e8245b4a-7be5-4cc8-a8f0-3f5f10b6f247, f09afbd4-7477-4de7-acf0-e42ee7edd9eb] protocols : [] sflow : [] status : {} stp_enable : false
テーブルサイズ変更
[komei@localhost ~]# ovs-vsctl set Bridge br-int other_config:mac-table-size=8192 [komei@localhost ~]# ovs-vsctl list bridge br-int _uuid : 4fc8c288-5a54-41ed-85f4-854eaf1f31fd controller : [] datapath_id : "00008ac2c84fed41" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {} ipfix : [] mirrors : [] name : br-int netflow : [] other_config : {mac-table-size="8192"} ports : [01e94661-0d5d-4154-b931-2f05068de40f, 25f9a4ed-7f73-4069-a9e2-fd67d4b870b4, 9c08bee6-0304-4cb5-82a4-676806f6e94e, d013c5a1-2e70-4e87-8d7a-5759b4e9cd22, e8245b4a-7be5-4cc8-a8f0-3f5f10b6f247, f09afbd4-7477-4de7-acf0-e42ee7edd9eb] protocols : [] sflow : [] status : {} stp_enable : false
何故か設定範囲を超えた値が入る気が・・・
[komei@localhost ~]# ovs-vsctl set Bridge br-int other_config:mac-table-size=1000000000 [komei@localhost ~]# ovs-vsctl list bridge br-int _uuid : 4fc8c288-5a54-41ed-85f4-854eaf1f31fd controller : [] datapath_id : "00008ac2c84fed41" datapath_type : "" external_ids : {} fail_mode : [] flood_vlans : [] flow_tables : {} ipfix : [] mirrors : [] name : br-int netflow : [] other_config : {mac-table-size="1000000000"} ports : [01e94661-0d5d-4154-b931-2f05068de40f, 25f9a4ed-7f73-4069-a9e2-fd67d4b870b4, 9c08bee6-0304-4cb5-82a4-676806f6e94e, d013c5a1-2e70-4e87-8d7a-5759b4e9cd22, e8245b4a-7be5-4cc8-a8f0-3f5f10b6f247, f09afbd4-7477-4de7-acf0-e42ee7edd9eb] protocols : [] sflow : [] status : {} stp_enable : false
現在のテーブル数確認
お好みで。
sudo ovs-appctl fdb/show br-int | wc -l
シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。
OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門
- 作者: 日本OpenStackユーザ会
- 出版社/メーカー: 翔泳社
- 発売日: 2015/01/28
- メディア: 大型本
- この商品を含むブログ (1件) を見る
オープンソース・クラウド基盤 OpenStack入門 構築・利用方法から内部構造の理解まで (アスキー書籍)
- 作者: 中井悦司,中島倫明
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/06/03
- メディア: Kindle版
- この商品を含むブログ (2件) を見る