気まぐれハック

HiRØのゆるふわIT備忘録

IIJ-Machinistを使ってみた

1. はじめに

ITエンジニアHiRØがraspberry piと温湿度センサーを使ってIIJのMachinistで温度監視をするだけのブログになります。

2. 環境

ハード:Raspberry pi 3 Model B (以降はラズパイと表示)

センサー:DHT11 (ラズパイの隣)

監視:IIJ-Machinist

machinist.iij.jp

f:id:HiRo1325:20210112230143j:plain

3. ラズパイとセンサーの接続

2.構成で説明した図の左から順に下記となります。

・GND

・DATA

・VCC

ピン配置図を参考に下記のように接続を行います。

・ピン(1):VCC

・ピン(6):GND

・ピン(8):DATA

f:id:HiRo1325:20210112233219p:plain

3. IIJ-Machinistの設定

次にIIJのMachinistの設定ですが、アカウント作成を行いGetting Startedのページを読み進め自分好みに設定を行ってください。 私の環境を簡単に説明するとMachinist側で作成する物は下記になります

・料金プラン:フリープランでアカウント作成

・エージェント数:1つ

※メトリックはデータをPostしたら逐一追加される。フリープランの場合10メトリックまで。

4. スクリプト

# coding: UTF-8
# RaspberryPiでDHT11センサーから温湿度データを取得
import urllib2
import json
import time
import dht11
import RPi.GPIO as GPIO
import requests

Temp_sensor=14
#温湿度データ取得
def get_temp():

    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)

    instance = dht11.DHT11(pin=Temp_sensor)

    while True:
        #データ取得
        result = instance.read()
        return result.temperature,result.humidity
def post(temperature):
    api_key = 'XXXXXXXXXXXXXX'    #ここは個人のapi-keyを設定
    url = 'https://gw.machinist.iij.jp/endpoint'
    header = {
             'Content-Type': 'application/json',
             'Authorization': 'Bearer '+ api_key,
             'User-Agent': 'Python'
    }
    data = {
            'agent': 'Home',
            'metrics': [
                {
                    'name': 'temperature',
                    'namespace': 'Environment Sensor',
                    'data_point': {
                        'value': temperature
                    }
                }
            ]
    }

    senddata = json.dumps(data).encode('ascii')
    req = urllib2.Request(url, data=senddata, headers=header)
    response = urllib2.urlopen(req)
if __name__ == '__main__':
    
    try:

        while True:
            #温湿度データ取得関数コール
            temperature,humidity = get_temp()

            #画面出力&Machinistへpost
            if temperature == 0:
                continue
            print("Temperature = ",temperature,"C"," Humidity = ",humidity,"%")
            post(temperature)
            #1分間隔
            time.sleep(60)

    except:
        pass

スクリプト作成には下記のDHT11についてのリポジトリの物を使用する。 流れは簡単に説明すると温湿度データを取得してMachinistへpostする流れです。 POSTする方法はHTTPでJSONとしてデータを送ります。

github.com

5. 実行

標準出力上では温度と湿度の両方を取得しております。

f:id:HiRo1325:20210112225605p:plain

6. IIJ-Machinistは・・・

Machinistへpostされてることを確認。 グラフの表示は折れ線や積み上げ面グラフなど様々です。

是非、試してみてください。

f:id:HiRo1325:20210112230950p:plain

f:id:HiRo1325:20210112231008p:plain

7. 余談

今回使った温湿度センサーで得られた温度の精度について、 自宅のDysonの冷暖房装置の温度センサー情報と比べてみたが近い値であることが確認できた。

f:id:HiRo1325:20210113012324j:plain

8. 最後に

今回はネットワークやansibleに関してではなかったが、たまにはこうして他の技術も取り上げて行きます。

AWXを使ってみた

1. はじめに

前回のansibleのプレイブックをAWX環境で動かしルータに設定できるか試してみました。

hiro1325.hatenablog.com

今回はルータに設定できるか試すだけなので、1つのルータの設定と確認のみを行うこととします。

いきなりAWXと思いますが、気にしないでください(笑)

自宅のサーバにAWX環境構築済みの為、環境構築からの記事にはなっておりません。 またどこかの機会で環境構築の記事を作成することがあるかもしれません。(多分)

2. AWX構築環境

簡単にAWXの環境だけ記載しておきます。

マシン:Dell Poweredge R410を使用

OS:VMware ESXi 上のubuntuを使用

3. ターゲットデバイス情報

前回と同様

Cisco(iOS)-892 サービス統合型ルータ

3. AWX実行までの流れ

  • プレイブックをgithubにプッシュ

  • プロジェクト設定

  • インベントリー設定

  • 認証設定

  • テンプレート設定

4. プレイブック

今回はルータ1台に対して設定を行うことを実験するので、設定は下記とする。 プレイブックのファイル名はospf.ymlとしてgithubにプッシュを行った。 今回使用したgithubのブランチはプライベートのブランチになる為、記載を行わないこととする。

---
- hosts: R3
  gather_facts: no
  tasks:
    - name: interface-setup
      ios_config:
        parents:
          - interface GigabitEthernet0
        lines:
          - ip address 192.168.2.2 255.255.255.0
    - name: ospf-setup
      ios_config:
        parents:
          - router ospf 1
        lines:
          - network 192.168.2.2 0.0.0.0 area 0

5. プロジェクト設定

プロジェクト設定ではプレイブックが格納されているブランチやディレクトリを指定を行う。 今回はgithubにプレイブックをプッシュした為、SCMタイプはGitとしている。(下図参照) SCMタイプを手動にするとAWXサーバに格納したプレイブックを指定することができる。

f:id:HiRo1325:20210105224348p:plain

6. インベントリー設定

次にAWXのインベントリー設定となる。

前回はインベントリーファイルにホストIPの情報と変数に認証情報などを記載しました。

同様にAWXのインベントリーにも設定を行う。

AWXのインベントリーはサイドメニューのインベントリーにて新規でインベントリーを作成することができます。 次の図では変数の詳細を行う。(図は既に設定済みになる) 設定内容は下記になる

  • 名前(任意)
  • インスタンスグループ
  • 組織(デフォルトだとadminが組織名になっている為、こちらを使用)
  • 変数(前回と同様の変数設定で良いがコロン(:)で区切ること)

f:id:HiRo1325:20210105014613p:plain

次にホストの設定を行います ホストの設定は下記とします。

  • ホスト名(プレイブックで指定したホスト名と同じ)
  • ホストIP
  • sshポート

f:id:HiRo1325:20210105012425p:plain

7. 認証設定

認証設定ではホストの認証設定を行う。 注意する点は認証情報タイプをマシンにすること。

今回はnetwork_cliで接続を行う為、マシンとなる。

その他の設定項目は環境に合わせて設定を行えば問題ない。

f:id:HiRo1325:20210105020931p:plain

8. テンプレート設定

こちらも既に設定済みの画像であるが、 サイドメニューのテンプレートにてジョブを作成することができる。

*は作成したいテンプレートジョブに応じて変更を行ってください。 今回だとインベントリー、プロジェクト、PLAYBOOKは先ほどまで作成したのを使用する為、図の通りになる。 ジョブタイプは実行チェックが有ります。 実行はPLAYBOOKの実行を行い、チェックはPLAYBOOKの構文の検査のみを行う。

f:id:HiRo1325:20210105022119p:plain

9.実行と確認

実行と結果については下図を参照ください。

AWX側の実行 f:id:HiRo1325:20210105223407p:plain

ciscoルータにて確認。

f:id:HiRo1325:20210105223422p:plain

10.最後に

まだ慣れてないことが多い為、その辺も踏まえ今後は記事で残して行けたらと思います。 またブログを作成する上でも動画を載せたいのですが、動画ファイルを直接添付ができない。 その為、youtubeを始める予定ですが、まだyoutubeのチャンネルを稼働しておりません。 開始したらブログに動画を載せよりわかりやすいブログを目指します。 また間違っている点など有りましたらコメントください。

ansibleを使ったネットワーク構築

1. 自己紹介

まずは自己紹介

 

ヨワヨワITエンジニアのHiRoといいます(笑)

ゆる〜く、IT技術に関することをブログにしていければと思っております。(更新は気まぐれ)

主にネットワーク技術に関することをansibleやpythonを踏まえながらブログ更新をしたいと思っております。

たま〜に脱線して違う技術ブログを更新するかも。。。

ブログ作成は会社を代表とした技術者ブログ作成が困難な為、それなら個人でやっちゃえ〜と思ったからです。 なので所属組織に関する物では有りません。

まぁ最初は勉強中のansibleの個人メモも兼ねてansibleでospfでのネットワーク構築の記事にしたいと思います。

今回の記事の流れは下記を予定してます。

  • ターゲット対象のデバイスの紹介

  • トポロジー紹介

  • インベントリーの紹介

  • プレイブックの紹介

  • 実行

  • 結果確認

2.使用デバイス紹介

Cisco(iOS)-892 サービス統合型ルータ

3.トポロジー

f:id:HiRo1325:20210101221932p:plain

上図にある通り、各ルーターのホスト名をR1~R3とします。 今回はansibleをメインにしてる為、設定するIPやエリアはテキトーです。

4.インベントリー

[r1]
192.168.100.21

[r2]
192.168.100.22

[r3]
192.168.100.23

[r1:vars]
ansible_connection=network_cli
ansible_network_os=ios
ansible_user=cisco
ansible_ssh_pass=cisco
ansible_become=yes
ansible_become_method=enable
ansible_become_pass=cisco
ansible_authorize=yes

[r2:vars]
ansible_connection=network_cli
ansible_network_os=ios
ansible_user=cisco
ansible_ssh_pass=cisco
ansible_become=yes
ansible_become_method=enable
ansible_become_pass=cisco
ansible_authorize=yes

[r3:vars]
ansible_connection=network_cli
ansible_network_os=ios
ansible_user=cisco
ansible_ssh_pass=cisco
ansible_become=yes
ansible_become_method=enable
ansible_become_pass=cisco
ansible_authorize=yes

今回はインベントリーのファイル名をinventとしました。

5.プレイブック

---
- hosts: r1
  gather_facts: no
  tasks:
    - name: interface-setup
      ios_config:
        parents:
          - interface FastEthernet8
        lines:
          - ip address 192.168.1.1 255.255.255.0
    - name: ospf-setup
      ios_config:
        parents:
          - router ospf 1
        lines:
          - network 192.168.1.1 0.0.0.0 area 0
- hosts: r2
  gather_facts: no
  tasks:
    - name: interface-setup
      ios_config:
        parents:
          - interface FastEthernet8
        lines:
          - ip address 192.168.1.2 255.255.255.0
    - name: interface-setup
      ios_config:
        parents:
          - interface GigabitEthernet0
        lines:
          - ip address 192.168.2.1 255.255.255.0
    - name: ospf-setup
      ios_config:
        parents:
          - router ospf 1
        lines:
          - network 192.168.1.2 0.0.0.0 area 0
          - network 192.168.2.1 0.0.0.0 area 0
- hosts: r3
  gather_facts: no
  tasks:
    - name: interface-setup
      ios_config:
        parents:
          - interface GigabitEthernet0
        lines:
          - ip address 192.168.2.2 255.255.255.0
    - name: ospf-setup
      ios_config:
        parents:
          - router ospf 1
        lines:
          - network 192.168.2.2 0.0.0.0 area 0

今回作成したプレイブックのファイル名はmain.ymlとしました。

使用したansibleのモジュールはios_configモジュールです。 ios_configはCisco(ios)の設定ができます。

今回はios_configモジュールのlinesパラメーターとparentsパラメーターを使用することで簡単なospfの設定を行いました。 parentsパラメーターでは主に階層を移動する設定などを行い、linesパラメーターでは1から複数のコマンドを指定して設定を行うことができます。

6.実行

ansible-playbook -i invent main.yml

7.結果

ansible-playbookの実行結果 f:id:HiRo1325:20210101224216p:plain

neighbor確認 f:id:HiRo1325:20210101230406p:plain

ping確認 f:id:HiRo1325:20210101230431p:plain

8.最後に

今回はansibleのios_configモジュールを使ってciscoルータでospfを喋らせてネットワーク構築を行ってみました。 こうしたらいいんじゃない?などご意見があればコメントいただけると幸いです。 今後もansibleに関して投稿は行いつつ、batfishやpyatsについても投稿を行っていく予定です。

9.参考ページ

docs.ansible.com