りまりまだんの本拠地

プリキュアを応援しつつ、技術的なこととかを色々かくぞ

ElasticsearchのURLを指定する

/etc/elasticsearch/elasticsearch.ymlでElasticsearchのIPを指定する方法を記載する。
というのもデフォルトではlocalhost:9200で通信するためである。

バックアップの取得

elasticsearch.ymlを編集する前にバックアップを取得する。

$ sudo cp -apr /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.org

$ sudo ls -al /etc/elasticsearch/
total 32
drwxr-x---  3 root elasticsearch 4096 May 21 07:29 .
drwxr-xr-x 78 root root          4096 May 21 07:02 ..
-rw-rw----  1 root elasticsearch 2854 Apr 28 17:45 elasticsearch.yml
-rw-rw----  1 root elasticsearch 2854 Apr 28 17:45 elasticsearch.yml.org
-rw-rw----  1 root elasticsearch 3117 Apr 28 17:45 jvm.options
-rw-rw----  1 root elasticsearch 4456 Apr 28 17:45 log4j2.properties
drwxr-x---  2 root elasticsearch 4096 Apr 28 17:45 scripts

elasticsearch.ymlの編集

network.hostはIPアドレスを指定し、port部分でポート指定を行う。
ここを間違えると永遠にConnection refusedになるので注意。
elasticsearch.ymlを編集する前はElasticsearchサービスを止めておいた方が良い。

$ sudo vim /etc/elasticsearch/elasticsearch.yml
# 56行目に55目の内容をコピーし、自ホストのIPアドレスに変更する
55 #network.host: 192.168.0.1
56 network.host: 10.0.1.51

動作確認

サービス再起動後、curlコマンドで指定したIP・ポートに到達するか確認する。
ここでエラーがある場合、ネットワーク関連の何らかで設定が間違っているので再度見直しを行う。

$ curl -XGET http://10.0.1.52:9200
{
  "name" : "kchQuTP",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "osGyfX3LRK6z1-AqH1hJrQ",
  "version" : {
    "number" : "5.4.0",
    "build_hash" : "780f8c4",
    "build_date" : "2017-04-28T17:43:27.229Z",
    "build_snapshot" : false,
    "lucene_version" : "6.5.0"
  },
  "tagline" : "You Know, for Search"
}

Amazon Linuxを日本時間に変更

Amazon LinuxはデフォルトだとUTC時間を使用する設定となっている。
このままだとログのタイムスタンプなどで不都合が出るため、JST時間に変更する。

etc/sysconfig/clockで時間指定

元の設定はUTCになっているので、Asia/Tokyoにロケールを変更してUTCを無効化する。

# ZONE="UTC"
# UTC=true

ZONE="Asia/Tokyo"
UTC=false

/etc/localtimeに/usr/share/zoneinfo/Japanを上書き

Amazon Linuxファイルにはデフォルトで日本時間用の設定ファイルが準備されているので、タイムゾーンの変更を行う。

$ sudo  cp /usr/share/zoneinfo/Japan /etc/localtime

crondサービスの再起動

crondサービスを再起動し、JST表示になれば日本時間に変更されている

$ sudo /etc/init.d/crond restart
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]

# 時刻の確認
$ date
Sun May 21 17:04:37 JST 2017

Amazon Linux にElasticsearch5.4をインストール

Amazon LinuxにElasticsearchのインストールをする手順を記載する。

Java1.8.0のインストール

Elasticsearchの起動にはJava(OpenJDK 1.8.0_73以上)が必要なので、インストールする

Javaのインストール

# バージョンの確認
$ java -version
java version "1.7.0_131"
OpenJDK Runtime Environment (amzn-2.6.9.0.71.amzn1-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)
$

# OpenJDK 1.8.0のインストール
$ sudo yum install java-1.8.0-openjdk-devel
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                                                                                                                            | 2.1 kB  00:00:00     
amzn-updates                                                                                                                                                         | 2.3 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package java-1.8.0-openjdk-devel.x86_64 1:1.8.0.131-2.b11.30.amzn1 will be installed
--> Processing Dependency: java-1.8.0-openjdk = 1:1.8.0.131-2.b11.30.amzn1 for package: 1:java-1.8.0-openjdk-devel-1.8.0.131-2.b11.30.amzn1.x86_64
--> Processing Dependency: libawt_xawt.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-devel-1.8.0.131-2.b11.30.amzn1.x86_64
--> Processing Dependency: libawt_xawt.so()(64bit) for package: 1:java-1.8.0-openjdk-devel-1.8.0.131-2.b11.30.amzn1.x86_64
--> Running transaction check
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.131-2.b11.30.amzn1 will be installed
--> Processing Dependency: java-1.8.0-openjdk-headless = 1:1.8.0.131-2.b11.30.amzn1 for package: 1:java-1.8.0-openjdk-1.8.0.131-2.b11.30.amzn1.x86_64
--> Running transaction check
---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.131-2.b11.30.amzn1 will be installed
amzn-main/latest/filelists_db                                                                                                                                        | 5.1 MB  00:00:00     
amzn-updates/latest/filelists_db                                                                                                                                     | 1.0 MB  00:00:00     
--> Processing Dependency: copy-jdk-configs >= 1.1-3 for package: 1:java-1.8.0-openjdk-headless-1.8.0.131-2.b11.30.amzn1.x86_64
--> Processing Dependency: lksctp-tools(x86-64) for package: 1:java-1.8.0-openjdk-headless-1.8.0.131-2.b11.30.amzn1.x86_64
--> Running transaction check
---> Package copy-jdk-configs.noarch 0:1.2-1.2.amzn1 will be installed
---> Package lksctp-tools.x86_64 0:1.0.10-7.7.amzn1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================
 Package                                               Arch                             Version                                                Repository                              Size
============================================================================================================================================================================================
Installing:
 java-1.8.0-openjdk-devel                              x86_64                           1:1.8.0.131-2.b11.30.amzn1                             amzn-updates                            12 M
Installing for dependencies:
 copy-jdk-configs                                      noarch                           1.2-1.2.amzn1                                          amzn-main                               13 k
 java-1.8.0-openjdk                                    x86_64                           1:1.8.0.131-2.b11.30.amzn1                             amzn-updates                           236 k
 java-1.8.0-openjdk-headless                           x86_64                           1:1.8.0.131-2.b11.30.amzn1                             amzn-updates                            39 M
 lksctp-tools                                          x86_64                           1.0.10-7.7.amzn1                                       amzn-main                               89 k

Transaction Summary
============================================================================================================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 51 M
Installed size: 143 M
Is this ok [y/d/N]: y
Downloading packages:
(1/5): copy-jdk-configs-1.2-1.2.amzn1.noarch.rpm                                                                                                                     |  13 kB  00:00:00     
(2/5): java-1.8.0-openjdk-1.8.0.131-2.b11.30.amzn1.x86_64.rpm                                                                                                        | 236 kB  00:00:00     
(3/5): lksctp-tools-1.0.10-7.7.amzn1.x86_64.rpm                                                                                                                      |  89 kB  00:00:00     
(4/5): java-1.8.0-openjdk-devel-1.8.0.131-2.b11.30.amzn1.x86_64.rpm                                                                                                  |  12 MB  00:00:01     
(5/5): java-1.8.0-openjdk-headless-1.8.0.131-2.b11.30.amzn1.x86_64.rpm                                                                                               |  39 MB  00:00:02     
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                                        16 MB/s |  51 MB  00:00:03     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : copy-jdk-configs-1.2-1.2.amzn1.noarch                                                                                                                                    1/5
  Installing : lksctp-tools-1.0.10-7.7.amzn1.x86_64                                                                                                                                     2/5
  Installing : 1:java-1.8.0-openjdk-headless-1.8.0.131-2.b11.30.amzn1.x86_64                                                                                                            3/5
  Installing : 1:java-1.8.0-openjdk-1.8.0.131-2.b11.30.amzn1.x86_64                                                                                                                     4/5
  Installing : 1:java-1.8.0-openjdk-devel-1.8.0.131-2.b11.30.amzn1.x86_64                                                                                                               5/5
  Verifying  : lksctp-tools-1.0.10-7.7.amzn1.x86_64                                                                                                                                     1/5
  Verifying  : 1:java-1.8.0-openjdk-headless-1.8.0.131-2.b11.30.amzn1.x86_64                                                                                                            2/5
  Verifying  : 1:java-1.8.0-openjdk-1.8.0.131-2.b11.30.amzn1.x86_64                                                                                                                     3/5
  Verifying  : 1:java-1.8.0-openjdk-devel-1.8.0.131-2.b11.30.amzn1.x86_64                                                                                                               4/5
  Verifying  : copy-jdk-configs-1.2-1.2.amzn1.noarch                                                                                                                                    5/5

Installed:
  java-1.8.0-openjdk-devel.x86_64 1:1.8.0.131-2.b11.30.amzn1                                                                                                                                

Dependency Installed:
  copy-jdk-configs.noarch 0:1.2-1.2.amzn1           java-1.8.0-openjdk.x86_64 1:1.8.0.131-2.b11.30.amzn1           java-1.8.0-openjdk-headless.x86_64 1:1.8.0.131-2.b11.30.amzn1          
  lksctp-tools.x86_64 0:1.0.10-7.7.amzn1           

Complete!
$

バージョンの変更

デフォルトからJavaがインストールされていた場合、明示的に使用するJavaのバージョンを変更する必要がある。alternativesコマンドを使用してJavaのバージョンを指定する。

# Javaのバージョンを変更する
$ sudo alternatives --config java

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

Enter to keep the current selection[+], or type selection number: 2
# 再度バージョンを確認
$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
$


# PATHが通っているか確認
$ echo $JAVA_HOME
/usr/lib/jvm/jre

rpmパッケージからインストール

CentOS5ではパッケージからのインストールはできないが、Amazon LinuxはCentOS6系のため、パッケージからのインストールが可能となる。

PGP鍵の登録

Elasticsearchのパッケージは暗号化されているため、PGP鍵の登録が必要となる。

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$
$ sudo touch /etc/yum.repos.d/elasticsearch.repo

elasticsearch.repoの追記

yumコマンドでインストールするため、リポジトリ登録をする。/etc/repos.d配下にelasticsearch.repoを作成し、こちらに記載されているリポジトリ内容を登録する。

$ vim elasticsearch.repo

# 以下を追記
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

$ sudo cat /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Elasticsearchのインストール

yumコマンドを使ってインストールする。バージョン指定しない場合、最新版が落ちてくる。多分バージョン指定もできるはず。

$ sudo yum install elasticsearch
Loaded plugins: priorities, update-motd, upgrade-helper
amzn-main                                                                                                                                                            | 2.1 kB  00:00:00     
amzn-updates                                                                                                                                                         | 2.3 kB  00:00:00     
elasticsearch-5.x                                                                                                                                                    | 1.3 kB  00:00:00     
elasticsearch-5.x/primary                                                                                                                                            |  54 kB  00:00:00     
elasticsearch-5.x                                                                                                                                                                   134/134
14 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package elasticsearch.noarch 0:5.4.0-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

============================================================================================================================================================================================
 Package                                        Arch                                    Version                                    Repository                                          Size
============================================================================================================================================================================================
Installing:
 elasticsearch                                  noarch                                  5.4.0-1                                    elasticsearch-5.x                                   32 M

Transaction Summary
============================================================================================================================================================================================
Install  1 Package

Total download size: 32 M
Installed size: 35 M
Is this ok [y/d/N]: y
Downloading packages:
elasticsearch-5.4.0.rpm                                                                                                                                              |  32 MB  00:00:08     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Creating elasticsearch group... OK
Creating elasticsearch user... OK
  Installing : elasticsearch-5.4.0-1.noarch                                                                                                                                             1/1
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using chkconfig
 sudo chkconfig --add elasticsearch
### You can start elasticsearch service by executing
 sudo service elasticsearch start
  Verifying  : elasticsearch-5.4.0-1.noarch                                                                                                                                             1/1

Installed:
  elasticsearch.noarch 0:5.4.0-1                                                                                                                                                            

Complete!
$

Elasticsearchの起動

起動コマンドの確認

ps -p 1でどの起動用コマンドを使うべきか確認する。 CMD欄にinitと表示されていればserviceコマンド、systemctlと表示されていればsystemctlコマンドを使用する。

ちなみにこのコマンドで調べる理由としては、PID1はLinux起動後、1番最初に起動するプロセスであり、他プロセスは全てPID1(initプログラムなど)から起動されるためである。つまり、他のプロセスの起動・停止方法はPID1のプログラムと同じ起動・停止方法になるので、サービス起動のコマンドを確認する手段として利用することができる。1

$ ps -p 1
  PID TTY          TIME CMD
    1 ?        00:00:00 init

この場合はserviceコマンドで起動することになる。ちなみにOSのバージョンによって起動コマンドはほぼ固定なので、そちらから確認しても良い。(でもコマンドで確認した方が早いと思う)

起動・停止

$ sudo service elasticsearch status
elasticsearch is stopped
$
$ sudo service elasticsearch start
elasticsearch is started

エラーなくサービス起動できれば、インストールは完了している。 問題がある場合、コマンドプロンプトにエラー出力される。

サービス登録

サービス登録はchkconfigコマンドを利用してできる。

$ sudo chkconfig --add elasticsearch
$ sudo chkconfig --list |grep elasticsearch
elasticsearch   0:off   1:off   2:on    3:on    4:on    5:on    6:off

作業者と作業指示者の見えている世界は違うし、分かり合えないとお互い不幸である、というはなし

人のことを悪く言うのは好きではないけれど、色々考えさせられる出来事があったので記録しておこうと思います。 自分はIT業界で仕事していますが、業界とか関係なくこういうことって良くあるんじゃないかなあ…。

前提とか

3ヶ月くらい一緒に仕事をしているAさんとBさんがいて、自分はどちらとも知り合いだった。

Aさんは自分の同期だった。年もそこまで離れていない。研修時代に割と話をしたりすることが多かった。話の飲み込みも早く、フットワーク軽く仕事ができるタイプなので、技術的な知識や経験は自分よりもはるかに上だと思う。

一方、Bさんはちょうど自分の一回りくらい上の年代の人で、技術者として優秀である。 「1質問すると100返ってくる」みたいなタイプの人で「歩く辞書」という言葉はこういうときに使うのか、と思うような人だ。自分が新人のとき、3ヶ月程度一緒に仕事をしたことがあった。

2人は3ヶ月くらい二人三脚状態で仕事をしており、「Aさんが基本的に仕事を進め わからないところの相談や仕事内容のレビューをBさんにしてもらう」という関係だった。仕事がひと段落したら、Aさんが持っている知識を書類に落としてBさんや社内の他の人に共有できるようにしようか、と約束をしていた。互いの関係はそこまで関係は悪くなく、お互いベストを尽くして仕事をしていたように見えた。

今はBさんは別の仕事に取り組んでいる。AさんはBさんと構築したシステムの保守対応をしつつ、設計書などの整備などを行なっている。ただ、別の仕事を頼まれそうになっており、少し限界なように見えた。

考えさせられる出来事は突然降ってくる

たまたまAさんとBさんから別々に互いに関する愚痴を聞く機会があった。どうも最近は関係性がよろしくないようだ。 ただ、話を聞くうちに「変だな」と思った。双方の主張が食い違いすぎるのだ。

Aさんの言い分

  • Bさんと一緒に構築していたシステムに使われている技術は汎用性が薄く、その分野を極めることにそこまで乗り気ではない
  • 現状の課題(しかも結構深刻なやつ)の解決策を自分なりに考え、Bさんに相談しに行くと「それは自分で考えてくれ、もう自分は関係ないし」というようなことを言われる(相談に全く乗ってくれない)
  • 相談したいだけなのに、過去の自分の落ち度をあれこれ責められるので疲れる
  • 自分の範疇外の部分に関しても「Aさんの落ち度だ」と言われるので辛い
  • キャパシティ的に限界なことはBさん・他の上長にも何回か伝えているのに受け入れてもらえない

Bさんの言い分

  • Aさんが「ノウハウを共有する機会が欲しい・使用した技術についてもっと詳しくなりたい」というから色々準備や機会を設けるように動いたのに、最近は全くやる気が感じられない
    (会社からお金を出してもらいセミナーを受けられるように調整もやったそう)
  • Aさんが持っている知識は書類に落としてもらう約束なのに、他の対応でうやむやにされている、むしろこのまま踏み倒されそう
  • Aさんから相談を受ければ自分の把握している範疇で答えるようにしているし、突っぱねた記憶はない(むしろ最近は相談に来てくれないと思っている)
  • Aさんの範疇外に関することは責めていない
  • (今課題があって困っているのは)Aさんが1人になっても困らないように自分が段取りしてやることを指示したのにも関わらず、Aさんが実行しなかったのが悪い
  • キャパシティ的に限界があるのであれば、Aさんが上長に直訴しに行くべきだが本人はその努力をしていない(甘えがあると思っている)

同じことについて話を聞いているはずなのに、1つも主張が噛み合わない。正直どちらも嘘ついているのではと思った。

どちらかが100%悪いわけではないが、反省するべきところは2人ともあると思う

当人からの主張しか聞いていないので、真偽はわからない。なのでどちらが悪いかについては言及しないし、どちらかの擁護はしない。ただし、AさんもBさんも反省すべきところはある

Aさんは自分の「やらないといけないこと」をやるべきだ

Aさんの問題は「自分の立場上やるべきこと」「頼まれた仕事を期限内にきちんとやること」ができていないということに尽きると思う。

頼まれたことを期限内にやる=「やらないといけないこと」

「自分が得たノウハウを資料にする」「構築したシステムの設計書を完成させる」ということをAさんは事前に頼まれていたわけだ。それを実行しないまま踏み逃げするのはやるべきことができていない、ということになる。

「他の仕事を頼まれたから」といって本来やるべき仕事を投げ出すのは間違っている。 本当は「これだけ仕事を持っているので」と断るべきだった。自分で自分の首を絞めてしまっているのだ。

手遅れになる前に言ってくれなきゃどうしようもない

やるべきことが期限内に終わるように段取りを組み、業務を遂行する。終わらない見込みができた時点で報告する、というのが作業者のやるべきことだと思う1。Aさんは期限の直前になって「終わりませんでした」と報告しているので、すでに手遅れなところも出ているらしい。これでは周りに迷惑をかけてしまうだけだ。

何かを頼まれた時に作業イメージ・期限を確認し、少しやったら上長と認識を合わせてずれがないかを確認する。進捗が悪ければきちんと報告する、というだけでAさんに対する信頼はぐっと上がるのではと思う。

仕事なんて自分の思い通りに行くわけない

Aさんの仕事が遅れてしまう原因は「100%の完成度で出さないと」という意識にもあると思う。でも周りを見ていると、60%の完成度で期限よりも余裕を持って仕上げてくれた方がみんな安心できるし、信頼度も高い。逆なのだ。

だいたい1人に対して全力で尽くしたり努力したりする恋愛ですら上手くいくことが少ないわけで、もっと複雑に要素が絡み合う仕事なんてもっと思い通りに進むわけがない。そのくらいに割り切って「とりあえず締め切りを全力で守る」ことに注力するべきだ。

完成度の向上なんて余った時間でやればいい。

Bさんは「自分と他の人は違う生き物だ」という意識を持つべきだし

実はBさんは、以前同じようなトラブルを別の人と起こしていた。その人もたまたま自分の同期だった。今回の話も前回の話も「自分は正しいことを言っており、悪いのは相手だ」という主張で一貫していた。

そんなわけがないだろうが。いい加減にしろよ。

まず反省ができない時点で終わっている

Bさんの話を聞いたとき、自分は「まあ人の話を聞いただけだし直接その場にいたわけではないので、どちらが悪いとは断定できないですね」と話をして終わった。

すると、Bさんは「Aさんがこう言っていた」という証拠として個人的なやりとりのメールなどを転送してきた。ちなみに「何が悪かったのかわからない」とも言っていた。いや子供かと呆れてしまった。Bさんが正しいと認めて欲しかったのだろうが、そもそもAさんとトラブルを起こしている時点で100%正しかったわけがないのだ。というかそんな個人的なやりとりを転送する暇があればまずは反省しろという話2だ。

自分ができるから他の人もできる、という幻想は捨てるべし

Bさんの深刻な問題点は「自分はできるのだから、他の人も同じようにやるべきだ」と自分の思想を押し付けてしまい、他の考えを許さないところにある。

「Aさんは引き継ぎ資料を作ってくれない」というけれど、冷静に見るとなーーんにもやっていないわけではない。Aさんはきちんと資料を作成しているが、Bさんの求めているクオリティに達していないから「何もやってない」と言っているだけなのだ。Aさんが優先事項を対応しつつ、資料を作ってくれたのに「何もやってない」と言ってしまうのはさすがにひどいと思うし、そんな人ためにAさんは努力する気になれないと思うのだ。

また、「Aさんが困らないように段取りをお膳立てして実行するだけにした」というのは経験値が高いBさん視点のお膳立てであり、Aさんが実行するには難しかったという可能性が高いのだ。Aさんをあれこれ責める前に、まずは自分の指示の出し方に問題がなかったか・Aさんの理解度を確認しておく努力はするべきだ。

自分と考えが違う人の方が多いんだぜ、世の中はさ

さらに悪いことに、Bさんは思想が合わない人を延々と責め立てる性質がある。周りからの評価は「Bさんのお気に入りの人は近くに置いておき、そうでない人は精神的にダメにされてしまう」となっている。確かに本人がいくら弁解してもお気に入りの人は贔屓している、としか見えない。そんな面倒な人に誰が相談に行きたいと思うだろうか。正直言って関わり合いになりたくない、と考える人の方が多いに決まっている。

この状況からすると、Aさんが「やりたい」と言った「ナレッジの共有」や「技術向上のためのセミナーの受講」もBさんが暗黙的に強要した可能性もあるのではと思う。Bさんのご機嫌を取って置かないと、いざという時に困るのはAさんだからだ。

そんな状態なのに、なんか相談に来なくなったとか言われても「そりゃそうだよね」としか言えない。

誰かに物をお願いするのであれば、相手をないがしろにするのはやめるべき

この"転送メール"を見る限り、BさんはAさんの地雷を100個くらい踏み抜いている。というのもAさんが相談している内容に対して「Bさん用に引き継ぎ資料を残してくれ、何なら書類の枠はこちらで作る」と返信しているのだ。困っているから助けてくれと言われたのに、そんなことより自分のためになんかしてくれと言っているのだ。そんなことされれば誰だってキレる。

人にものを頼みたいのであれば、その人が置かれている状況をよく観察して慎重に頼むことだ。

もふもふの結論

とりあえず、もふもふが思ったのはポジションが違うだけで別世界が見えているからコミュニケーションにはめっちゃ気を使わないといかんねということです。

  • 作業者ポジションの人は「報告・連絡・相談を」きちんとする。
    仕事は何でも受けない。最優先のものを確認し、締め切りは死ぬ気で守る。
    締め切りはクオリティよりも優先されるべき。

  • 上長者ポジションの人は「報告・連絡・相談」がされやすい人を守る。
    「相談」が来ないのはだいたい自分のせい。思想の押し付けとかしてないか確認する。
    作業の意図が伝わっているか確認することは、後々の自分を助けてくれる。

自分もAさん・Bさんになっていないか振り返りつつ生活しないとなあ、と思ったのでした。


  1. もちろんこれを書いているもふもふも、作業者ポジションである。管理者はごめんです。

  2. 原稿しないといけないのに、この愚痴を聞くのに2時間近く付き合ってあげただけで偉いと思う。マジふざけんなと思った。

AWSで踏み台サーバを経由してWebアプリサーバへ接続する設定をしたときのめも

AWSで踏み台サーバ(Amazon Linux)を経由してWebアプリケーション用サーバに接続できるようにしたとき、結構ハマってしまったのでめも
参考サイト

セキュリティグループの設定

踏み台はssh接続のみを外部から受け付けるように設定し、Webアプリケーション用のサーバ(Webアプリサーバ)はhttp・https通信のみ受け付けるように設定する。また、双方がdefaultのセキュリティグループに属していることが必要なので注意する。

(defaultのグループのルールを介して通信するためらしいけど、いまいちよくわかっていない感ある)

defaultセキュリティグループにどちらも属していない場合

  1. EC2>右クリック>ネットワーキングから、セキュリティグループの変更を選択する。
  2. インスタンスに関連づけるセキュリティグループにdefaultを追加する。
  3. セキュリティグループの割り当てをクリックする。

踏み台サーバ(dev_jumpsrv01)用セキュリティグループの設定

種別 タイプ プロトコル ポート範囲 送信元
インバウンド ssh TCP 22 0.0.0.0/0
アウトバウンド すべてのトラフィック すべて すべて 0.0.0.0/0

Webアプリサーバ(dev_webserver02)用セキュリティグループの設定

種別 タイプ プロトコル ポート範囲 送信元
インバウンド http TCP 80 0.0.0.0/0
インバウンド http TCP 443 0.0.0.0/0
インバウンド http TCP 443 ::/0
アウトバウンド すべてのトラフィック すべて すべて 0.0.0.0/0

クライアントPCの~/.ssh設定

毎度sshコマンドを使用するのが面倒なので、~/.ssh/configに接続情報を記載する。

ssh/configの編集

Host

ssh時に指定する引数を記載する。host名と同じにしておくとわかりやすいかも。

Hostname

IPアドレスを記載する。踏み台はパブリックIP(もしくはプライベートIP)、そのほかはプライベートIPを記載。

IdentityFile(踏み台限定の設定)

.pemのありかを記載する。フルパス指定で記載すること。

ProxyCommand(踏み台以外の設定)

踏み台に入るときのコマンドを記載する。ハマりどころが多かったので記録しておくと

  • sshコマンドは引数-Fを指定する。
    デフォルトで/etc/ssh/configというファイルがあり、こちらと競合するからか、ホスト名での名前解決ができなかった。
  • サーバ名は踏み台サーバのHost記載と合わせる
    こちらを合わせないと名前解決できずにエラーとなる。
  • ローカルから直接Webアプリサーバへ接続させたい場合、IdentityFileの指定を忘れないこと。
    パスはローカルのものを指定すること。
  • WebアプリサーバのHostnameはプライベートIPでもOK
# クライアントPCに記載する
Host dev_jumpsrv01
  Hostname 52.193.XX.XX
  User ec2-user
  IdentityFile /Users/mofumofu/.ssh/秘密鍵.pem
Host dev_webserver02
  Hostname 10.0.0.100
  User ec2-user
  IdentityFile /Users/mofumofu/.ssh/秘密鍵.pem
  ProxyCommand ssh -F ~/.ssh/config dev_jumpsrv01 -W %h:%p

踏み台サーバへの接続テスト

$~ mofumofu$ sudo ssh -F ~/.ssh/config dev_jumpsrv01
Last login: Wed May  3 05:53:58 2017 from mofumofu-no-pc
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
[ec2-user@ip-10-0-0-239 ~]$ exit
logout
Connection to 52.193.XX.XX closed.
$~ mofumofu$
$~ mofumofu$

Webアプリサーバへ直接接続できるかテスト

$~ mofumofu$ sudo ssh -F ~/.ssh/config dev_webserver02
Last login: Wed May  3 07:20:10 2017 from 10.0.0.239

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
6 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-0-100 ~]$

ログをみると、dev_jumpsrv01を経由してdev_webserver02に接続していることがわかる。
windowsでも同じことはできるのかな?

macでssh接続のめも

いつもはWindowsのTeratermを使っていたので、macでssh接続するときのめも

鍵を使わない場合

Linuxコマンドと変わらない。

ssh ユーザー名@接続先IPアドレス

キーペアを使ってsshする場合

秘密鍵の配置

~/.sshフォルダ下に秘密鍵を配置する。

$~ mofumofu$ cp /ダウンロードした秘密鍵のパス/秘密鍵.pem ~/.ssh/
$~ mofumofu$ ls -al ~/.ssh/
total 16
drwx------   4 mofumofu  staff   136  5  3 11:59 .
drwxr-xr-x+ 49 mofumofu  staff  1666  5  3 11:21 ..
-rw-r--r--@  1 mofumofu  staff  1692  5  3 11:59 秘密鍵.pem
-rw-r--r--   1 mofumofu  staff   396 10  3  2015 known_hosts
$~ mofumofu$

アクセス権を変更

AWSの場合、秘密鍵に対して外部からアクセスできないようにする必要があるため、秘密鍵のアクセス権を400に変更する。

$~ mofumofu$ sudo chmod 400 ~/.ssh/
$~ mofumofu$ ls -al ~/.ssh/

root以外はアクセスできないようになっているので、sudoで権限を確認する

$~ mofumofu$ sudo ls -al ~/.ssh
total 16
dr--------   4 mofumofu  staff   136  5  3 11:59 .
drwxr-xr-x+ 49 mofumofu  staff  1666  5  3 11:21 ..
-rw-r--r--@  1 mofumofu  staff  1692  5  3 11:59 秘密鍵.pem
-rw-r--r--   1 mofumofu  staff   396 10  3  2015 known_hosts

ssh接続する

秘密鍵は絶対パスで指定する。

sudo ssh -i "秘密鍵のフルパス" ユーザ名@IPアドレス

$~ mofumofu$ sudo  ssh -i "/Users/mofumofu/.ssh/秘密鍵.pem" ec2-user@IPアドレス
Password:
The authenticity of host 'IPアドレス (IPアドレス)' can't be established.
ECDSA key fingerprint is XXXXX/XXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'IPアドレス' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
[ec2-user@プライベートIP ~]$

macのchmodはLinuxとオプションが違うので少し戸惑いますね…。

第19回elasticsearch勉強会に行きました

www.meetup.com

こちらの勉強会に参加したときのメモです。
Elastic{ON}のFBをメインにしつつ、Elstic Stackの新機能紹介の会でした。

話聞きながらメモ取ってたので、間違ってるところがあれば教えてもらえると助かります。

大谷さんの話

Elastic{ON}の特徴

  • Ask me anythingコーナーがメイン
    Elastic Stackの開発者が1箇所に集まっているので、自由に質問することができます。 リストを持参して質問している人もいたとか。

  • カンファレンスのご飯が美味しい
    会場の向かいに駐車場があり、ケータリングがやってくるので好きなものを食べられコーナーです。いいなあ。
    これに関しては企業ブログとかTwitterのハッシュタグで追いかけていただくといいと思います。

  • Cause Awards
    Elastic Stackを用いて社会貢献しているプロジェクトを紹介するコーナーがkeynote内にありました。 犯罪防止への取り組み方法などを紹介していたようです。

新機能の紹介

センサーの可視化

はじめにセンサーデータをKibanaで可視化したユースケースの紹介動画を見せていただきました。
バレエダンサーの体につけたセンサーデータをKibanaグラフでリアルタイムに可視化したのが売りらしい。あまり用途がよくわからなかったけどなんかすごかったです。

コミュニティ数

コミュニティ数は世界に8500ほどあるようです。
ダウンロード数もそこそこ。日本からのダウンロード数もそこそこ。

決してダウンロード数を聞き逃したとかいうわけではない

UPDATE情報

KibanaとBeatsの機能拡張をメインにしつつ、ElasticsearchとLogstashもちょこちょこUPDATEがあるよ、という印象を受けました。 日本だと"検索エンジンとしてのElasticsearch"利用が多い感あるのでどのくらい受けるのかは未知数だなと思いました。

range型の登場

データを保存するときにrangeも保存することで、データの検索時に重複しているのかなどを考慮する必要がなくなります。
「何時から何時まで」みたいなデータを取得するときに便利です。

TileMapサービスの拡張

X-Pack(無償版もあるで)を入れるとズームレベルを10まで上げることができます。
X-Packは無償版もあるんですね。有償版だけかと思ってた。

Beatsの拡張

BeatsはGo言語で書かれている軽量パッケージです。まだあまり使っている人は少なそうですね。
新登場のHeartbeatとファイル取り込みができるFilebeatの機能拡張について紹介がありました。

  • Heartbeat
    pingを打ってサーバなどの死活監視ができます。
  • Filebeat Modules
    よくあるファイル種別(Apacheのaccess.logとか)であれば、Modulesの設定をするだけでファイルデータを自動でパース・KibanaのDashboardも自動で生成できる機能が追加となるようです。

Elasticsearch ingest

elasticsearchのindex内にデータを格納する前に処理を追記できる機能。
こちらを利用することで、Filebeat Modulesの機能を実現している。

KibanaグラフのVisual Builder

KibanaやTimelionのビジュアル(グラフ)を簡単に描くことができる機能を提供している。

機械学習への参入

データの波形を元に正常系を学習し、もし基準値から外れた場合は異常検知してくれるツールです。 Elastic Stack5.4からの登場だそうで。
30日間無料なので試してみるのは面白そうです。

Elastic Cloud Enterprise

Elastic Stackの基盤を提供するサービスです。AWSと似ていますね。
大規模クラスター運用したい、とか

今後の構想

Elasticsearchに対してSQL検索できる

待ってましたあ! Elasticsearchに対してSQLのクエリを投げて検索できるようになります。標準SQLのみの対応予定だそうです。いいことだ。
ついでに悪しきwhere句でのテーブル結合も未対応にしといてくれるといいなあ。 まずはSelect文を中心に開発を行うようです。Elasticsearchの中にSQLを解釈するエンジンを組み込む予定なので、JDBC接続とはちょっと違うようです。
まだ開発中ですが、X-Packに組み込まれる予定だそう。

Kibana Canvas

Kibanaの画面上でインフォグラフィック的なグラフを作成することができるようになります。公式の動画とか見た方が雰囲気わかると思います。
データ分析をした結果をプレゼンテーションするときにPowerPointなどにグラフを描くのではなく、Kibana上でElasticsearch内のデータを表示しながら話をすることができるようになるかもしれません。

これはElastic{ON}当日にハッシュタグに張り付いて見てたんですが、めっちゃ驚きましたねー。ブログ記事もちらほら見かけましたが、Elastic{ON}のYouTubeが1番イメージ掴みやすいと思います。

大谷さんがハッピーになるようにみんなYouTubeを見るんだ。

そのた

Elastic Stack5.3の情報とか先々の情報とかも紹介いただきました。

  • 将来Elastic Stack5系から6系にUPDATEする場合、ポーリングによるUPDATEを可能とする予定なんだそうです。サービス停止しなくていいのは嬉しい。
  • 日本語化
    ymlファイルなどに日本語で表示したい箇所の設定を記載し、テンプレートすることでKibanaの日本語表示を行うことができるようにする機能を実装予定だそうです。エンドユーザー向けにはいいかも。
  • Logstash設定のVisualize化
    Logstash設定をKibanaから行うことで、設定の記載を簡素化することができるようにする機能が登場予定だそうです。

全体的に新機能はBeatsとKibana UIの活用をメインとしているような感じに見えました。

LTコーナー

実際にカンファレンス参加された方の感想をLTとして紹介頂きました。

前原さんの話

Elasticsearch勉強会ですが、AndroidのTシャツを着用しての登場でした。なんでAndroid?
Elastic {ON}に参加したときの感想がメインだったと思います。

  • スポンサーに競合企業が多い
    確かに日本だとあまりない習慣ですよね。
  • ディスカッション多し
    みんなずっとディスカッションしてたそうです。技術的なことで議論できる人が近くにいるのはいいよなー。

白井さんの話

営業観点から見たElastic Stackのおすすめ新機能をランキング形式で紹介されていました。 実際は第3位からの発表でしたが、こんな感じのランキングでした。

  1. 機械学習
  2. Kibana Canvas
  3. Logstash設定のGUI化

自動検知は確かに便利そうですよね。

感想とか

会場のせいもあると思いますが、めっちゃ講義感ある勉強会でした。
ふつーの勉強会ってこういう感じなんですかね?