SIerにいる若手開発者(プログラマ)が知るべき運用とは その1

最初に

今会社で実業務しつつ、新人研修をやっていたりするのですが、 プログラムを書くのはJava研修的なものでやってきているけど、例外catchしてprintStacktraceとか 書いているのはいいけど、なんで書いているのか、実業務でどう使われる?とか いろいろ足りていない、、、というか知るわけないのでちょっとここでまとめて 教えようと思います。

私の経験で見てきたこと中心なので、間違っているとかあると思いますので、 もし何かあればコメントいただけたら幸いです。

システム運用とは?

システム運用って何でしょうか??開発系の部署と運用系の部署があって・・・は聞いているかも? で、私がやっているのは開発系であり、運用なんて関係ないよねー あ、ここでいう運用はシステム運用の事です。

って、そんなことないです。

システムの一連の流れとしては、開発してリリースすると運用が始まります。 ほとんどのシステムは開発より運用の方が長いです。 そして開発時にいろいろ運用を意識していないと後々運用側が困ったり余計なコストがかかったり 下手するとシステムを直す必要まで出てきてしまいます。

ってちょっと横道に行った。運用とは?ですが wikipedia見たらこんな感じでした。 「システム運用(-うんよう)とは、コンピュータシステム等のシステムが停止することなく、利用顧客に対してつつがなくサービスを提供できるよう当該環境を維持管理すること。」

システム運用 - Wikipedia

「つつがなくサービスを提供」するためには何をする必要があるのか?

大きく言うと2つに分かれます。

  • 定型作業
  • 非定型作業

ここでは大きく「定型作業」とはある流れに従った作業とします。非定型はその逆で流れがない、つまりマニュアルなどが作れるかどうか?です。 システム運用は「定型作業」と「非定型作業」を毎日行って「つつがなくサービスを提供」しています。

定型作業

じゃあ定型作業ってどんなものがあるのか?例えばこんなものです。

  • システムからある申請が出された場合に、その内容を印刷して郵送する
  • 月に1回システムの利用状況を資料に取りまとめてみんなに共有する
  • 手順書に従い、サーバに入ってコマンドを実行する

などなど。 基本的には手順教えてもらえれば誰でもできる、さらに発生日時が決まっていることが多いです。

非定型作業

こちらはマニュアルなど存在せず、エンジニアなどが考えて対処する必要があります。例えば

  • WEBのシステムがさっきまで使えていたのに画面が全くでなくなったのでなんとかしなくてはならない
  • 処理の合計金額がおかしくなっておりお客さんからクレームが来た

などなど。 手順などなく基本的に想定外で、いつ起こるかわかりません。胃が痛くなりそう・・・(笑)

システム運用の理想形

運用者の目線からすると理想はこれです。

何もしていないけどつつがなくサービスを提供されている

これが最強w ただこれを実現するためには、 サーバなどは絶対に落ちることはなく、書いたプログラムは絶対にバグはなく、 ユーザがやりたいことはすべてシステム化できている必要があります。

無理w

なので、そんな非現実的な理想はともかくですが、 運用者としたらやりたくない作業は以下の順番になります。 細かく区切ればいくらでもあげられそうですが、いったん下記と定義します。 つまり開発者は作成したシステムで発生する事象がなるべく下記で下の方に近づくことを目指せば 運用者から感謝されます。

  1. いつ何が起こったか情報も何もなく、意味不明で何をしていいのかわからない非定型作業
  2. いつ何が起こったかだけはわかるが、意味不明で何をしていいのかわからない非定型作業
  3. 非定型ではあるが必要な情報はそろっており、頑張ればなんとかなる非定型作業
  4. 手順が整備されていない定型作業
  5. 手順が整備されている定型作業
  6. 何もしない

システムが運用者に情報を伝える手段

いったん目線の角度を変えますが、システムが運用者に情報を伝える手段はざっくり以下になります。

  • ログ
  • 監視
  • メール/電話/チャットなど人間が普段コミュニケーションに使うツール

※1 監視にかかってメールじゃん!とかはいったん気にしないでw ※2 電話とかチャットとかもありますが、SIerで自動電話とかなかなか使えないのでいったん忘れて。

ログ

これはあまり説明いらない気もしますが、多くの場合は単純にファイルにログの情報を出します。DBなどの場合もあります。 運用としては運用者が見てみるか!と思ったら見ることができます。 基本的にログが能動的に運用者に何か起きたよ!とトリガーを引いてくれることはありません。

監視

そのままですが、システムの状態を監視して想定外の状態になった場合は特定のアクションを実行します。 JP1やHinemosがその代表で世の中にはたくさんのミドルウェアがあります。 メジャーどころの監視としては以下のような監視です。

  • CPUやメモリ、ディスクなどにちゃんと余裕があるかどうかを監視
  • プロセス(Tomcatなど)がちゃんとあがっているかどうかを監視
  • ログに特定の文言が出てこないかどうか監視
  • HTTPのステータスや電文の中身が正常であるかどうか監視

特定のアクションとしては、単純に監視ソフトウェア上で赤文字で出したり、「人間が普段のコミュニケーションに使うツール(メール/電話/チャットなど)」に通知したり、パトカーみたいなランプを光らせたり何らかで運用者に伝えます。

人間が普段のコミュニケーションに使うツール(メール/電話/チャットなど)

これは上記で書いた監視で想定外の場合、もしくは単純にシステム内の機能として運用者に通知してあげるという機能を作ってあげる必要があります。 プログラムとして以下のようなコードを書くだけ。

if(運用が必要な場合) {
    運用者にメールを送信する
}

実際にコードを書く際にどうすべきなのか?

やっと本題w 先ほども書いた以下の順序が下に下がるようなソースを書く必要があります。

  1. いつ何が起こったか情報も何もなく、意味不明で何をしていいのかわからない非定型作業
  2. いつ何が起こったかだけはわかるが、意味不明で何をしていいのかわからない非定型作業
  3. 非定型ではあるが必要な情報はそろっており、頑張ればなんとかなる非定型作業
  4. 手順が整備されていない定型作業
  5. 手順が整備されている定型作業
  6. 何もしない

次の記事に続きます。

SIerにいる若手開発者(プログラマ)が知るべき運用とは その2 - のんびりプログラムのお勉強でも・・・・・・・

社内勉強会

先日、社内勉強会が開催されました。 うちの会社それなりに人数いるはずなのに人が集まらない。。。

どうすればいいんだろうなぁ~と悩む今日この頃。

今回はテーマを技術寄りではなくヒューマンスキル寄りでした。

  • プロジェクト体制とエンジニアのキャリアについて
  • 異文化交流について
  • 技術者面談について

技術者面談についてを発表してきました! 個人的には結構な悩みでどうすればいい感じの人を見つけ出せるんだろう?ということで、 質問例をいくつかあげてみて、周りに聞いてみようと思いましたが、 時間切れであまり聞けず・・・

また誰かと飲みながらでも聞いてみるかな

どっかー

docker-toolboxとdocker-for-windows

  • 会社のPCにはdocker入れてJenkins動かしていたりするのですが、いろいろあって家のWindowsに入れたいので、手順思い出しがてら久々のブログ。
  • docker-toolbox使って入れたような気がするけど、docker-for-windowsってのもあるのか。家ではWindows10で会社だとWindows7だからなー。ぐぐってみた感じdocker-for-windowsはWIndows10のデフォルトに存在するVM?を使うのか。docker-toolboxは確かにVirtual Boxが勝手に入っていておぉ!?ってなったな。
    • と思ったらdocker-for-windowsのexeを実行したらHomeエディションでは使えないよ!って出たのであきらめてdocker-toolbox。

docker-toolboxインストー

  • インストーラダウンロードは以下。

  • インストールはとりあえずデフォルトでOK連打して完了。

    • 楽勝!って思ってできたショートカット実行するといきなりエラー(涙)
    • bash.exeがありません。とのこと。ショートカットを右クリックして詳細を見てみるとgitBashを使おうとしているがGitのパスはそこじゃないっす状態になっていました。
    • とりあえずパスを無理やりGitがインストールされている所に変えたら起動しました。

atomでmarkdownを書くときに入れたプラグイン

プレビューを自動で開く

インストール方法

  • ATOM本体からSetting -> Installから検索する「markdown-preview-opener」

プレビューを自動で開く

  • 文章をフォーマット「tidy-markdown

インストール方法

  • ATOM本体からSetting -> Installから検索する「tidy-markdown

デザインを少し変えてみました

このデザイン、Mistilteinn 

Mistilteinn - テーマ ストア - はてなブログ

を使わせてもらっているんですが、なんか真ん中によっててなーと思っていたので、 CSSをさわってみる。

はてなの右上の管理メニューから「デザイン」を選択

f:id:iwanaga0918:20151212105103p:plain:w150

デザインの編集メニューが出るので、スパナみたいなボタンを押して、 カスタマイズ。 一番下の「デザインCSS

f:id:iwanaga0918:20151212105301p:plain:w150

ここにCSSを記述すれば反映されるみたい。

と言うことで、使っているCSShttp://hatenablog.com/theme/11696248318755805834.css)を テキストで参照して、下に追記してクラスを上書き。

僕の場合は、widthおよびmarginが変えたかったので、以下を追加。

#container {
    margin: 50px;
}
#content {
    width: 1235px;
}
#wrapper {
    width: 920px;
}

幅が広がった!および左側のマージンがなくなった! レスポンシブとかいろいろ思うことはあるが、とりあえず変わったからいいやw

ちなみにここにCSS入れると右側にプレビューが出て変更後の状態が見れるので便利。 とは言え、どこ変えるんだ?って感じだったので、 chromeの開発者ツールを使ってみた。

詳細はChrome+開発者ツールとかやれば出るので、適当に。F12押せば何とかなるかと。

Jenkins おすすめプラグイン ~ジョブのパラメータをまとめ変更~

もう1つ。 同じようなジョブが並んでいる人向け。

以下のプラグインを使うと、パラメータを一気に変えられます。 バージョンをリストボックスで選択させている人で、バージョンアップ時に 1つずつ変えるの大変なんだよなーとかに!

Configuration Slicing Plugin - Jenkins - Jenkins Wiki

Jenkinsのおすすめプラグイン~ログコンソールに時間を出す~

おすすめと言うか、違うところで環境構築したいので、 自分が入れているのなんだっけ?的なメモ

コンソール出力に時間を出す

Timestamper - Jenkins - Jenkins Wiki

いつ実行したの?とか時間がかかった時にどのくらいかかっている?とか。 基本ログには出していると思うけど、 出ていないのもあるので。