mito’s blog

IT技術メインの雑記。思い立ったが吉日。

Ubuntuでオンプレ版NetBox2.11を建てる

はじめに

先日リリースされたNetBox2.11を触りたかったので、オンプレ版を建てました。

環境


NetBox2.11の構築

公式のインストールガイドを参照しながら進めていきます。

netbox.readthedocs.io


# apt update
# apt install -y postgresql libpq-dev
# systemctl start postgresql
# systemctl enable postgresql
# sudo -u postgres psql
psql (12.6 (Ubuntu 12.6-0ubuntu0.20.04.1))
Type "help" for help.

postgres=# CREATE DATABASE netbox;
CREATE DATABASE
postgres=# CREATE USER netbox WITH PASSWORD 'パスワード';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q

# psql --username netbox --password --host localhost netbox
Password: パスワード
psql (12.6 (Ubuntu 12.6-0ubuntu0.20.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

netbox=> \conninfo
You are connected to database "netbox" as user "netbox" on host "localhost" (address "127.0.0.1") at port "5432".
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
netbox=> \q

# apt install -y redis-server
# redis-cli ping
PONG

# apt install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
# wget https://github.com/netbox-community/netbox/archive/v2.11.0.tar.gz
--2021-04-19 14:08:46--  https://github.com/netbox-community/netbox/archive/v2.11.0.tar.gz
Resolving github.com (github.com)... 52.69.186.44
Connecting to github.com (github.com)|52.69.186.44|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/netbox-community/netbox/tar.gz/v2.11.0 [following]
--2021-04-19 14:08:47--  https://codeload.github.com/netbox-community/netbox/tar.gz/v2.11.0
Resolving codeload.github.com (codeload.github.com)... 52.68.31.213
Connecting to codeload.github.com (codeload.github.com)|52.68.31.213|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: ‘v2.11.0.tar.gz’

v2.11.0.tar.gz                       [      <=>                                               ]   6.77M  5.59MB/s    in 1.2s    

2021-04-19 14:08:48 (5.59 MB/s) - ‘v2.11.0.tar.gz’ saved [7101381]

# tar -xzf v2.11.0.tar.gz -C /opt
# ln -s /opt/netbox-2.11.0/ /opt/netbox
# ls -l /opt | grep netbox
lrwxrwxrwx 1 root root   19 Apr 19 14:09 netbox -> /opt/netbox-2.11.0/
drwxrwxr-x 7 root root 4096 Apr 16 13:52 netbox-2.11.0

# adduser --system --group netbox
Adding system user `netbox' (UID 115) ...
Adding new group `netbox' (GID 122) ...
Adding new user `netbox' (UID 115) with group `netbox' ...
Creating home directory `/home/netbox' ...
# chown --recursive netbox /opt/netbox/netbox/media/

# cd /opt/netbox/netbox/netbox/
# cp configuration.example.py configuration.py
# python3 ../generate_secret_key.py
XXXXXXXXXXXXパスワード50文字XXXXXXXXXXXXXXXXXXXXXXX

# vim configuration.py
- ALLOWED_HOSTS = []             
+ ALLOWED_HOSTS = ['*']             
DATABASE = {
    'NAME': 'netbox',         # Database name
    'USER': 'netbox',               # PostgreSQL username
-    'PASSWORD': '',           # PostgreSQL password
+    'PASSWORD': 'XXXXXX',           # PostgreSQL password
    'HOST': 'localhost',      # Database server
    'PORT': '',               # Database port (leave blank for default)
    'CONN_MAX_AGE': 300,      # Max database connection age
}
- SECRET_KEY = ''
+ SECRET_KEY = 'XXXXXXXXXXXパスワード50文字XXXXXXXXXXXXXXXXXXX'





- TIME_ZONE = 'UTC'
+ TIME_ZONE = 'Asia/Tokyo'
# /opt/netbox/upgrade.sh

# source /opt/netbox/venv/bin/activate
(venv) # cd /opt/netbox/netbox
(venv) # python3 manage.py createsuperuser
Username (leave blank to use 'root'): admin
Email address: 
Password: パスワード
Password (again): パスワード
Superuser created successfully.
(venv) # deactivate

# cp /opt/netbox/contrib/gunicorn.py /opt/netbox/gunicorn.py
# cp -v /opt/netbox/contrib/*.service /etc/systemd/system/
'/opt/netbox/contrib/netbox-rq.service' -> '/etc/systemd/system/netbox-rq.service'
'/opt/netbox/contrib/netbox.service' -> '/etc/systemd/system/netbox.service'

# systemctl daemon-reload
# systemctl start netbox netbox-rq
# systemctl enable netbox netbox-rq
Created symlink /etc/systemd/system/multi-user.target.wants/netbox.service → /etc/systemd/system/netbox.service.
Created symlink /etc/systemd/system/multi-user.target.wants/netbox-rq.service → /etc/systemd/system/netbox-rq.service.

# systemctl enable netbox netbox-rq
Created symlink /etc/systemd/system/multi-user.target.wants/netbox.service → /etc/systemd/system/netbox.service.
Created symlink /etc/systemd/system/multi-user.target.wants/netbox-rq.service → /etc/systemd/system/netbox-rq.service.
# systemctl status netbox.service
● netbox.service - NetBox WSGI Service
     Loaded: loaded (/etc/systemd/system/netbox.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-04-19 14:32:11 UTC; 18s ago
       Docs: https://netbox.readthedocs.io/en/stable/
   Main PID: 11299 (gunicorn)
      Tasks: 6 (limit: 4706)
     Memory: 336.5M
     CGroup: /system.slice/netbox.service
             ├─11299 /opt/netbox-2.11.0/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /o>
             ├─11316 /opt/netbox-2.11.0/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /o>
             ├─11317 /opt/netbox-2.11.0/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /o>
             ├─11318 /opt/netbox-2.11.0/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /o>
             ├─11319 /opt/netbox-2.11.0/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /o>
             └─11320 /opt/netbox-2.11.0/venv/bin/python3 /opt/netbox/venv/bin/gunicorn --pid /var/tmp/netbox.pid --pythonpath /o>

Apr 19 14:32:11 XXXXXXXXXX systemd[1]: Started NetBox WSGI Service.
Apr 19 14:32:11 XXXXXXXXXX gunicorn[11299]: [2021-04-19 14:32:11 +0000] [11299] [INFO] Starting gunicorn 20.1.0
Apr 19 14:32:11 XXXXXXXXXX gunicorn[11299]: [2021-04-19 14:32:11 +0000] [11299] [INFO] Listening at: http://127.0.0.1:8001>
Apr 19 14:32:11 XXXXXXXXXX gunicorn[11299]: [2021-04-19 14:32:11 +0000] [11299] [INFO] Using worker: threads

# apt install -y nginx
# cp /opt/netbox/contrib/nginx.conf /etc/nginx/sites-available/netbox
# vim /etc/nginx/sites-available/netbox
server {
-    listen 443 ssl;
+ #    listen 443 ssl;
    # CHANGE THIS TO YOUR SERVER'S NAME
-     server_name netbox.example.com;
-     ssl_certificate /etc/ssl/certs/netbox.crt;
-     ssl_certificate_key /etc/ssl/private/netbox.key;
+ #    server_name netbox.example.com;
+ #    ssl_certificate /etc/ssl/certs/netbox.crt;
+ #    ssl_certificate_key /etc/ssl/private/netbox.key;
    client_max_body_size 25m;

    location /static/ {
        alias /opt/netbox/netbox/static/;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    # Redirect HTTP traffic to HTTPS
    listen 80;
    server_name _;
    return 301 https://$host$request_uri;
}

# rm /etc/nginx/sites-enabled/default
# ln -s /etc/nginx/sites-available/netbox /etc/nginx/sites-enabled/netbox
# systemctl restart nginx


ブラウザで以下に接続します。

http://(IPアドレス)/


雑記

docker-compose版が待ち遠しい。

【Ansible】junos_interfaces の使い方と junos_config との違い

はじめに

Ansible の junos_interfaces モジュールを使いながら、junos_config モジュールとの違いを確認します。


環境

Ansible

  • ansible 2.9.17
  • paramiko インストール
  • ncclient インストール

Router

  • JUNOS 18.3R1.9
  • netconf 有効


junos_interfaces モジュールと junos_config モジュールの違い

  • junos_interfaces

    • check_commit がない
    • configuration に set interfaces ge-0/0/0 enable が明示的に表示されない
    • 結果に、netconf のコマンドが格納される
  • junos_config

    • check_commit がある
    • configuration に set interfaces ge-0/0/0 enable が明示的に表示される


インターフェース ge-0/0/0 を有効にする

junos_interfaces

Playbook

---
- hosts: r1
  gather_facts: no

  tasks:
    - name: enabled interfaces ge-0/0/0
      junos_interfaces:
        config:
          - name: ge-0/0/0
            enabled: true
        state: overridden
      register: result

    - name: debug
      debug:
        msg: "{{ result }}"

モジュールの説明

  • junos_interfaces モジュール
    • インターフェースの構成を管理します
    • configure exclusive 相当の動作です
      • 他のユーザが configure モードに遷移していると失敗します
      • 未 commit の設定変更があると失敗します
    • config
      • リスト形式で、複数のインターフェースを設定変更できます
      • name
        • インターフェース名を記載します
      • enabled
        • インターフェースの有効/無効を指定します
    • state
      • junos_interfaces モジュール実行後の状態を指定します
      • インターフェースを up / down させるなら、overridden、または replaced を指定します

その他のオプション

  • junos_interfaces モジュール
    • config
      • description
        • インターフェースの説明を記載します
    • duplex
      • automatic、full-duplex、half-duplex を指定します

実行ログ

● Playbook実行前のjunos
> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                down  down
ge-0/0/0.0              up    down inet     172.16.1.1/24
                                   multiservice

> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 disable
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

● Playbook実行
# ansible-playbook -i inventory.ini port_up2.yml

PLAY [r1] **********************************************************************

TASK [enabled interfaces ge-0/0/0] *********************************************
changed: [r1]

TASK [debug] *******************************************************************
ok: [r1] => {
    "msg": {
        "after": [
            {
                "enabled": true,
                "name": "ge-0/0/0"
            },
            {
                "enabled": true,
                "name": "ge-0/0/1"
            },
            {
                "enabled": true,
                "name": "fxp0"
            },
            {
                "enabled": true,
                "name": "lo0"
            }
        ],
        "before": [
            {
                "enabled": false,
                "name": "ge-0/0/0"
            },
            {
                "enabled": true,
                "name": "ge-0/0/1"
            },
            {
                "enabled": true,
                "name": "fxp0"
            },
            {
                "enabled": true,
                "name": "lo0"
            }
        ],
        "changed": true,
        "commands": [
            "<nc:interfaces xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><nc:interface><nc:name>ge-0/0/0</nc:name><nc:description delete=\"delete\"/><nc:speed delete=\"delete\"/><nc:mtu delete=\"delete\"/><nc:link-mode delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface><nc:interface><nc:name>ge-0/0/0</nc:name></nc:interface><nc:interface><nc:name>ge-0/0/1</nc:name><nc:description delete=\"delete\"/><nc:speed delete=\"delete\"/><nc:mtu delete=\"delete\"/><nc:link-mode delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface><nc:interface><nc:name>fxp0</nc:name><nc:description delete=\"delete\"/><nc:speed delete=\"delete\"/><nc:link-mode delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface><nc:interface><nc:name>lo0</nc:name><nc:description delete=\"delete\"/><nc:disable delete=\"delete\"/><nc:hold-time><nc:up delete=\"delete\"/><nc:down delete=\"delete\"/></nc:hold-time></nc:interface></nc:interfaces>"
        ],
        "failed": false
    }
}

PLAY RECAP *********************************************************************
r1   : ok=2  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0 

● Playbook実行後のjunos
> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     172.16.1.1/24
                                   multiservice

戻り値

  • after ‐ モジュール実行後のインターフェース構成
  • before ‐ モジュール実行前のインターフェース構成
  • commands ‐ netconf のコマンド


junos_config

junos_config モジュールを使って、ge-0/0/0 を up します。 Playbook はこちらの記事を参照してください。

実行ログ

● Playbook実行前のjunos
> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 disable
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                down  down
ge-0/0/0.0              up    down inet     172.16.1.1/24
                                   multiservice

● Playbook実行
# ansible-playbook -i inventory.ini port_up.yml

PLAY [r1] **********************************************************************

TASK [commit interfaces enable] ************************************************
changed: [r1]

PLAY RECAP *********************************************************************
r1   : ok=1  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0

● Playbook実行後のjunos
> show configuration | display set | grep "set interfaces ge-0/0/0"
set interfaces ge-0/0/0 enable
set interfaces ge-0/0/0 unit 0 family inet address 172.16.1.1/24

> show interfaces ge-0/0/0 terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     172.16.1.1/24
                                   multiservice


インターフェースの設定はどちらのモジュールを使ったほうが良いか

check commit が必要なら、junos_config を使う。ほかは、cnfiguration にインターフェース enable の記載が無くてもいいなら、 junos_interfaces のほうが良さそう。モジュール実行前後のステータスを表示してくれるし。


雑記

state: deleted で、インターフェースの disable を消して up してみた。出来たw
あとから見直すと混乱の元なので、お勧めは出来ない。

【Ansible】junos_config モジュールを使う(set interfaces XXXX enable)

はじめに

Ansible の junos_config モジュールを使ってみます。

docs.ansible.com


環境

Ansible

  • ansible 2.9.17
  • paramiko インストール
  • ncclient インストール

Router

  • JUNOS 18.3R1.9
  • netconf 有効


インターフェース ge-0/0/0 を有効にする

Playbook

---
- hosts: r1
  gather_facts: no

  tasks:
    - name: commit interfaces enable
      junos_config:
        lines:
          - set interfaces ge-0/0/0 enable
  • junos_config モジュール

    • junos の構成を管理します
  • lines パラメータ

    • set または、delete から始まる設定変更を指定します
    • リスト形式のため、複数の設定変更を指定できます
    • configure exclusive 相当の動作です
      • 他のユーザが configure モードに遷移していると失敗します
      • 未 commit の設定変更があると失敗します


実行ログ

● Playbook実行前のjunos
> show interfaces ge-0/0/0 terse    
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                down  down
ge-0/0/0.0              up    down inet     172.16.1.1/24   
                                   multiservice

● ansible
# ansible-playbook -i inventory.ini port_up.yml 

PLAY [r1] **********************************************************************

TASK [commit interfaces enable] ************************************************
changed: [r1]

PLAY RECAP *********************************************************************
r1   : ok=1  changed=1  unreachable=0  failed=0  skipped=0  rescued=0  ignored=0   

● Playbook実行後のjunos
> show interfaces ge-0/0/0 terse    
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet     172.16.1.1/24   
                                   multiservice


その他のパラメータ

  • check_commit: yes

    • commit せず、構文の正確さをチェックします
    • デフォルトは no です
  • rollback: 1

    • 引数で指定された過去の設定にロールバックします
    • 最新のコミットにロールバックするには、引数を 0 にします
    • lines とは同時に指定できません


バックアップを取ってから、インターフェース ge-0/0/0 を有効にする

Playbook

---
- hosts: r1
  gather_facts: no

  tasks:
    - name: commit interfaces enable
      junos_config:
        lines:
          - set interfaces ge-0/0/0 enable
        backup: yes
        backup_options:
          filename: backup.cfg
          dir_path: /root/juniper
      register: result

    - name: debug
      debug:
        msg: "{{ result }}"
  • backup

    • commit 前の設定をバックアップします
    • デフォルトは no です
  • backup_options

    • filename
      • バックアップファイル名を指定します
      • 指定しない場合、ファイル名は _config.<current-date>@<current-time> になります
        • 例:r1_config.2021-03-15@00:12:50
      • dir_path: /root/juniper


実行ログ

# ansible-playbook -i inventory.ini port_up.yml 

PLAY [r1] **********************************************************************

TASK [commit interfaces enable] ************************************************
changed: [r1]

TASK [debug] *******************************************************************
ok: [r1] => {
    "msg": {
        "backup_path": "/root/juniper/r1_config.2021-03-15@00:21:46",
        "changed": true,
        "date": "2021-03-15",
        "failed": false,
        "filename": "r1_config.2021-03-15@00:21:46",
        "shortname": "/root/juniper/r1_config",
        "time": "01:51:46"
    }
}

PLAY RECAP *********************************************************************
r1 : ok=2  changed=1  unreachable=0  failed=0  skipped=0  rescued=0    ignored=0   


備考

src パラメータで設定ファイルを適用することも、zeroize: yes で初期化することもできるようです。

Backlog World 2021 参加レポート

jbug.connpass.com

www.youtube.com

セッション 発表者
開会式・諸注意・概要説明 Backlog World 2021 運営委員長 中道 一志@ici_mici
ワークスタイル・トランスフォーメーション 株式会社キャスター 石倉 秀明@kohide_I
Go To Eatキャンペーンを支えたプロジェクトマネジメント Retty株式会社 常松 祐一@tunepolo
PJメンバーで共有する「プロジェクト憲章」ことはじめ 株式会社サービシンク 名村 晋治@yakumo
Good Project Award 2021 presented by nulab
Backlog × Redmineツール対談~プロジェクトマネジメントを民主化しよう~ redmineエバンジェリスト 門屋 浩文@MadoWindahead
株式会社ヌーラボ 河内 一弘@tamagawaconan
株式会社タンバリン 駒田 美沙子@komamichako
全国JBUG支部企画
顧問弁護士だってBacklogを使いたい! 遠藤 千尋@endo_law
Backlogでプログラマーに顧客対応をやってもらったら業務改善が進んだ 株式会社インターファクトリー 塩谷 俊介@shiochan_12
「越境」〜未来の旅人たちへのメッセージ〜 あまねキャリア工房 沢渡 あまねamane_sawatari
クロージング


出来る限り視聴できたセッションについて書きます。
スタッフ、登壇者のみなさま、ありがとうございました!

ワークスタイル・トランスフォーメーション
by 株式会社キャスター 石倉 秀明さん

f:id:mst-it:20210313225728j:plain

  • 働き方がバラバラな人たちでチームを組む
  • 働き方のテーマ
    • 個人の働き方がどう変わるのか(社員フルタイムの人には関係ない?)
    • 本人の働き方に関係なく「全員」に仕事の変化は訪れている
      • 本人の周りが変わる=本人にも変化があるということ
      • じゃあどう変わるの?

f:id:mst-it:20210313230318j:plain

  • コミュニケーションの重要能力がシフトしてきている
    • 話す/聞く → 読む/書く

確かに、テキストだと雰囲気とかあいまいな物言いが通じにくく、明確に書けないと伝達に時間がかかったり誤解が生じやすいです。

  • 意図しないと出来ない
    • 相談/壁打ち
    • 雑談/プライベートの話

リモートワークが始まったころの雑談は、意図的にする雑談=仕事していないみたいなイメージをもっていました。出社時の雑談は、通りすがりとか何かのついでに始まるので、仕事の一部という感覚で。
今は、私の上長は雑談も業務、そもそも出社してても雑談するだろと言っているので雑談しやすいです。

  • 思考、設定のプロセスを見えるかしよう

これは非常にわかります!スラックに、今やっていることと考えていることを垂れ流しながしていますが、そうすると周りに見えるからフォローされやすく、仕事が進めやすいので思考の見えるかはお勧めです。

  • 多様性
    • モチベーションも気にしない
    • 何がモチベーションかは人によって違う。日によっても違う
    • 一個に絞るとか、邪魔する権利はない

思うところがあるけどうまく言語化できず、モチベーション低いときは出社・リモート関係なく進捗がないですよね。

Go To Eatキャンペーンを支えたプロジェクトマネジメント
by Retty株式会社 常松 祐一さん

f:id:mst-it:20210313235504j:plain

  • スケジュール最優先
    • いつ始まるか分からない

もうここだけで胃がキリキリしてきます。

f:id:mst-it:20210313235632j:plain

  • 情報を一か所に集めオープンにする
    • スラックのチャンネルは1つ、議事録も1ファイル
    • 会議はROM専OK
      • 探すことが簡単、経緯が追いやすい

議事録を1ファイルで更新していくやり方は、導入経緯は違えど先日から取り入れてますが、確かに追いやすく便利です。複数のファイルを開いて、ここは次のファイルのどれに繋がるんだ?なんて考えなくていいですし。

  • 進捗は全体のバーンアップチャートで示す

バーンダウンチャートよりもバーンアップチャートのほうがやっている感が出ますね!スラックに進捗を書く際、完了したことも頭に[DONE]と書き残すことで、これだけやってるなと自己肯定感が高まります。

PJメンバーで共有する『プロジェクト憲章』ことはじめ
by 株式会社サービシンク 名村 晋治さん

www.slideshare.net

Backlog World 2021「PJメンバーで共有する『プロジェクト憲章』ことはじめ」|Webディレクションやってます blog

  • 正論は正解ではない

  • メンバーが自発的に動けない理由

    • 何をしたらいいか分からない
    • どこに情報があるか分からない

相手によっては、あとはよしなにって頼み方をするときがありますが、前提として共通の認識・情報をもっているから出来てるんだなと。情報共有(のしやすさ)は本当に大事。

  • プロジェクト憲章

畑違いかなと思って聞いてましたが、見積もりやキックオフで共有する情報ですね。呼び方知りませんでした。

  • テンプレートの活用

まだまだBacklogを有効に使う余地があると思いました。テンプレートのお土産ありがとうございます!

Backlog × Redmineツール対談

f:id:mst-it:20210314004911j:plain

  • ツールに助けられるはず
    • 経緯を記録する=未来の自分を助ける


顧問弁護士だってBacklogを使いたい!
by 遠藤 千尋さん

www.slideshare.net


Backlogでプログラマーに顧客対応をやってもらったら業務改善が進んだ
by 株式会社インターファクトリー 塩谷 俊介さん

f:id:mst-it:20210314005436j:plain


「越境」〜未来の旅人たちへのメッセージ〜
by あまねキャリア工房 沢渡 あまねさん

docs.google.com

  • 現場のリアル・もやもやと、経営のリアル・もやもやは違う、が、繋がっている

現場が経営者の視点を持てって言われる話に一方的な押し付けを若干感じていたけど、同じ景色を見る、景色を合わせるという言いまわしが腑に落ちた。

  • ファシリテーター + リーダー = ファシリーダー 
    • 理性のマネジメントに、エモーションを載せて進めていく

立場も働き方も違うのに、今までのやり方では同じゴールに辿りつけない。


雑記

去年もためになったし、今年もためになりました。何となくやっていたこと、思っていたことがお聞きできて言語化できました(していただいた)。 6時間の運営は本当に大変だったお思います。改めてスタッフ、登壇者のみなさま、ありがとうございました!

あとは公募で落ちたLTネタをどこかで話せれば。

関連

「JBUG 東京 #16」に参加しました - mito’s blog


VS Codeの短形選択と矩形貼付の操作方法

サクラエディタならAltを押しながら任意の範囲を選択するだけだけど、VS Codeの場合はちょっとクリックするキーが多い。
しかもマウスとキーボードで操作が異なる。

  • マウスで操作する場合
    • shift + alt + マウスで任意の範囲を選択し、コピー(or 切り取り)する
    • shift + alt + マウスでコピーした行数と同じ行数を選択し、ペーストする
  • キーボードで操作する場合
    • ctrl + shift + alt + 矢印で任意の範囲を選択し、(or 切り取り)する
    • ctrl + shift + alt + 矢印でコピーした行数と同じ行数を選択し、ペーストする


f:id:mst-it:20210127001828g:plain


ペーストする際、コピーした行数と同じ行数を選択しないと、コピーした形通りにペーストされません。また、ペースト先はカラムをそろえる必要があります。
そろそろVS Codeに移行しよ。

【Ansible】WindowsへのWinRMサービス設定で、セキュリティによるエラーを回避する

目的

Ansibleを使いたいため、WindowsServer2016に以下の手順を参考にしながらWinRMサービス設定を行ったところ、エラーが出て失敗。 簡単な回避方法があったのでここに記す。 docs.ansible.com


エラー内容

公式ドキュメント記載の手順、3行目で失敗します。

$url = "https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file


スクリプトのダウンロードに失敗していますね。
日本語でのエラーメッセージがこうで、

PS C:\Users\Administrator> $url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
"2" 個の引数を指定して "DownloadFile" を呼び出し中に例外が発生しました: "要求は中止されました: SSL/TLS のセキュリティで保護されているチャネルを作成できませんでした"
発生場所 行:1 文字:1
+ (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException


英語でのエラーメッセージがこっち。

PS C:\Users\Administrator> (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Exception calling "DownloadFile" with "2" argument(s): "The request was aborted: Could not create SSL/TLS secure channel."
At line:1 char:1
+ (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException


簡単な回避策

スクリプトのダウンロードに失敗しているので、手動でそれを作成するだけです。
スクリプトの微修正や設定変更などは不要!

  1. ConfigureRemotingForAnsible.ps1をブラウザで開く。 ansible/ConfigureRemotingForAnsible.ps1 at devel · ansible/ansible · GitHub

  2. テキストにコピペする。スクリプト名は「ConfigureRemotingForAnsible.ps1」で、文字コードは「Unicode」で保存すること。絶対。

  3. 隠しフォルダを表示し、「C:\Users\Administrator\AppData\Local\Temp\」に2で作ったスクリプトを置く。

  4. 管理者権限でPowershellを実行し、コマンドをたたくでおk。

PS C:\Users\Administrator> $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS C:\Users\Administrator> powershell.exe -ExecutionPolicy ByPass -File $file
Self-signed SSL certificate generated; thumbprint: D5006B006958E6A365DD26E82C422352BC40C6A4


wxf                 : http://schemas.xmlsoap.org/ws/2004/09/transfer
a                   : http://schemas.xmlsoap.org/ws/2004/08/addressing
w                   : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
lang                : en-US
Address             : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
ReferenceParameters : ReferenceParameters

Ok.

PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 172.31.32.14, ::1, 2001:0:348b:fb58:88c:3e90:53e0:dff1, fe80::5efe:172.31.32.14%7, fe80::88
c:3e90:53e0:dff1%6, fe80::f4b3:ee13:47ac:a094%4

Listener
    Address = *
    Transport = HTTPS
    Port = 5986
    Hostname = EC2AMAZ-11KTLG7
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint = D5006B006958E6A365DD26E82C422352BC40C6A4
    ListeningOn = 127.0.0.1, 172.31.32.14, ::1, 2001:0:348b:fb58:88c:3e90:53e0:dff1, fe80::5efe:172.31.32.14%7, fe80::88
c:3e90:53e0:dff1%6, fe80::f4b3:ee13:47ac:a094%4

PS C:\Users\Administrator>


f:id:mst-it:20210123095225j:plain

雑記

いいんじゃなーい。
この手は1ファイルだけで完結するからさくっとできた話。

Zabbixで正規表現を使ったトリガーによるsyslog監視を行う(更新版)

この記事は、Zabbix Advent Calendar 2020 - Qiitaの23日目のエントリです。

目的

今年の4月ごろに書いた、正規表現を使ったsyslog監視のトリガーの記事のアクセスが多かったので、丁寧に書きおなしてみました。 Zabbixのバージョンは5.2ですが、4.0でも設定方法は変わりません。

  • syslogの監視について、対応が必要なログ、調査したことのないログのみアラートを上げる設定にします。

ERRORやFATALレベルのログは既知も未知も全て検知する、INFOMATIONは既知も未知も全て検知しないといった設定は簡単ですが、対応が不要なログを検知したり、調査したほうが良いログを見逃してしまう可能性もあります。そのため、初めはその設定で対応要不要のログを切り分けていき、対応するべきログのみアラートを上げるよう、より運用に適した設定にしていきます。



正規表現の設定

Zabbixの設定に、項目「正規表現」があります。これを使って、まずは以下のように分けて登録します。

  • アラートを上げたい
    • 対応が必要な既知のログ
    • 調査したことのない未知のログ
  • アラートを上げない
    • 調査した結果、対応が不要な既知のログ
      • 調査したことのない未知のログの判定に使用


設定個所です。

管理 -> 一般設定 -> 正規表現

f:id:mst-it:20201223230859j:plain

正規表現を登録します。

f:id:mst-it:20201223232644j:plain


アラートを上げたいログをまとめた設定が「Alert1」「Alert2」です。
「Alert1」「Alert2」は、登録した文字列を引っ掛けた場合、結果が真となるようにします。条件式のAnd/Or設定は出来ないため(Andのみ)、条件式は「いずれかの文字列が含まれる」形式を1つのみとし、文字列の上限数(半角256文字)を超える場合は「Alert2」のように増やします。

f:id:mst-it:20201223233408j:plain


アラートを上げないログをまとめた設定が「NO_Alert」です。
「NO_Alert」は、登録した文字列を引っ掛けた場合、結果が偽となるようにします。1つでも引っ掛けると偽になれば良いため、条件式は「文字列が含まれない」形式を必要分作成し、対応不要なログを登録していきます。

f:id:mst-it:20201223233852j:plain



トリガーの設定

既知の対応必要なログのトリガーを設定します。
正規表現の「Alert1」または「Alert2」の結果が真(1)の場合=対応必要なログを検知した場合、アラートを上げます。

トリガー名:REQUIRED:{ITEM.VALUE}
条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert1)}=1 or
    {Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert2)}=1

対応が必要か不要か分からない、未知のログのトリガーを設定します。
正規表現の「NO_Alert」の結果が真(1)の場合=対応不要と判断されていないログ、かつ、 「Alert1」と「Alert2」の結果が偽(0)の場合=対応が必要ではないログの場合、未知のログと判断しアラートを上げます。

トリガー名:UNKNOWN:{ITEM.VALUE}
条件式:{Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@NO_Alert)}=1 and
    {Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert1)}=0 and
    {Template_zabbix:log[/var/log/testlog,[],UTF-8].iregexp(@Alert2)}=0



備考

もっと良いやり方がありましたら、教えてください。条件式のAnd/Or設定が出来たら、もっと見やすく設定できそう。