インフラ

【インフラ初心者超必見】インフラ情報まとめ

はじめに

面白い会社でインフラ兼サーバーエンジニアをしている@enzenです。

インフラ周りっていろいろありすぎて情報がゴチャゴチャしすぎじゃないですか?
もともとアプリケーションエンジニアだったので、インフラ周りの全体像を学ぶのにすごく時間がかかりました。
そこで登場人物?をまとめたらきっと役に立つはずと思いこの記事を書くことにしました。

先人たちが記述してくれた記録をまとめる記事になります。先人たちに感謝!感謝!
有名どころをメインにまとめて行きたいと思います。

OS

とりあえずOSがないとなにも始まりませんからね。以下はWikiから引用。

オペレーティングシステム(英語: Operating System、OS、オーエス)とは、コンピュータのオペレーション(操作・運用・運転)のために、ソフトウェアの中でも基本的、中核的位置づけのシステムソフトウェアである。通常、OSメーカーが組み上げたコンピュータプログラムの集合として、作成され提供されている。

簡単にまとめるとユーザがコンピュータを動かしやすくするための基盤となるシステムということですね。
みなさんOSの種類何個言えますか?
私は5個くらいしか記憶してませんでしたが実はOSって沢山あるんですよね。(Linuxは種類がとても多い)
そのなかでも有名どころとその概要を以下にまとめます。

OS名 概要 参考リンク
Windows 一般的なコンピュータにインストールされているOSといえばWindows 公式
macOS AppleのコンピューターにインストールされているOS 公式
Unix MacOSなど様々なOSの原型となったOS Wiki
Linux オープンソースのOS 公式
BSD系 Unixが元となったオープンソースのOS 公式
iOS Apple社が開発したiPhoneやiPadに利用されるOS 公式
Android Google社が開発した主にスマートフォンに利用されるOS 公式

OSといえばこんなものかと思うが、我々エンジニアにはかけがえのないLinuxディストリビューションの紹介もしようと思います。
様々なディストリビューションが存在するが、主流となっている Red Hat系 Debian系 Slackware系 の3種類から少しピックアップしたいと思います

Red Hat系

OS名 概要 参考リンク
RHEL クライアントやサーバー向けのOS 公式
CentOS RHELをクローンしたOS 公式
fedora 実験的な要素の強いOS 公式
Korora fedoraをより使いやすくすることを重視したOS 公式

Debian系

OS名 概要 参考リンク
Debian Debianプロジェクトによって開発が進められている安定性に定評があるOS 公式
Ubuntu Debianをベースとした使いやすさに特化したOS 公式
ZorinOS UbuntuをベースとしたビジュアルにこだわったOS 公式
Linux Mint Linux Mintは使い勝手が良くモダンでエレガントな環境と提供するOS 公式
Pinguy OS WindowsやMacユーザーも違和感なく使えることを重視したOS 公式
MX Linux エレガントなデスクトップでDebianベースのOS 公式
elementary OS Macを彷彿させるOS 公式

Slackware系

OS名 概要 参考リンク
Slackware 最も古いLinux系OS 公式
openSUSE 初心者から開発者までユーザーを問わず誰でも使えるOS 公式

いやー沢山ありますねー。
Linuxディストリビューション選びでお悩みの方はこちらの【2018年】初心者にオススメなLinuxディストリビューションを参考にされると良いかもしれません。

Webサーバ

以下はWikiから引用。

Webサーバ(ウェブサーバ、英:Web server)は、HTTPに則り、クライアントソフトウェアのウェブブラウザに対して、HTMLやオブジェクト(画像など)の表示を提供するサービスプログラム及び、そのサービスが動作するサーバコンピュータを指す。

Webサーバーについてよくわかっていない方は
今更聞けない!Webサーバーの仕組みと構築方法
ウェブサーバ (Webサーバ)とは
などをご覧いただくとわかりやすいかと思います。

それでは有名どころを簡単にまとめます。

名前 概要 参考リンク
Apache 世界中で使用されているWebサーバーソフトウェア 公式
Apacheとは?Webサーバーの仕組みと人気サーバーソフトを徹底解説
Nginx イベント駆動モデルで大量アクセスに強く、静的コンテンツを高速で配信できるWebサーバーソフトウェア 公式
nginxでWebサーバを構築してみよう
IIS Microsoft製のWindows向けのWebサーバーソフトウェア 公式:Web サーバー (IIS) の概要
IISとは

APサーバ

以下はWikiから引用。

アプリケーションサーバ(英: Application Server)は、ビジネスロジックなどを実装したアプリケーションソフトウェアを実行することを専門とするコンピュータネットワーク上のサーバコンピュータ、もしくはそのようなコンピュータ上でのアプリケーションの実行を管理補助するミドルウェアのこと。

簡単にまとめるとプログラムが置いてあるサーバということですね。
ここも有名どころを簡単にまとめます。

名前 対応言語 概要 参考リンク
Tomcat Java Java ServletやJavaServer Pages (JSP) を実行するためのWebコンテナ Tomcatって何ですか?
JBoss Java Javaによるオープンソースソフトウェアの総称でJava EE標準準拠のAPサーバとして認識されることが多い 企業向けアプリの常識を学び、JBossの環境構築 (1/2)
GlassFish Java Java EE準拠のアプリケーションサーバ GlassFishからアプローチするJava~入門編~第1回「GlassFishとNetBeansのインストール」
WebSphere Application Server Java IBM製のJava EE準拠のアプリケーションサーバ 公式
unicorn Ruby Railsなどでつくられたアプリケーションを動かすアプリケーションサーバ Railsを動作させるアプリケーションサーバunicornとは?概要やnginxとの違いなど
puma Ruby Railsなどでつくられたアプリケーションを動かすアプリケーションサーバ Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳)

DBサーバ

WikiがなかったのでWeblioから引用。

別名:データベースサーバ
【英】database server
データベースサーバーとは、データベースを内部に持ち、データベース管理システムが動作しているサーバーのことである。
データベースサーバーは、クライアントからのリクエストなどに対してデータベースの検索などの処理を行い、処理結果を返す。

すごく簡単にいうとデータベースが置いてあるサーバということです。
そんなDBサーバに必要なDBの有名どころを簡単にまとめます。

名前 概要 参考リンク
MySQL 現在、世界中で最もよく利用されているオープンソースのデータベースのひとつで高速で使いやすいことが特徴 公式
PostgreSQL MySQLと双璧をなすオープンソースのデータベースで機能が豊富かつ標準SQLへの準拠度が比較的高い 公式
SQLite アプリケーションの一部に組み込まれて動作するタイプのデータベースで手軽さと高速な動作から中小規模の開発向け 公式
Oracle DB 非常に高機能なデータベース 公式
SQL Server マイクロソフト系システム開発で幅広く利用されているデータベース 公式
DB2 大規模システム構築などで世界的に使われているデータベース 公式
H2 Database Javaで実装されたオープンソースのデータベース 公式

プロビジョニング

サーバーやOSの話をしてきましたがこれらの設定やセットアップを手動でやるのは危険です。
ヒューマンエラーやOSやバージョンの違いで思いもしないハマりポイントがあります。
そんな時に恐ろしく便利なプロビジョニングツール!!

以下はWikiより引用

プロビジョニング(英: Provisioning)は、本来は「準備、提供、設備」などの意味であり、現在では通常、音声通信やコンピュータなどの分野における、ユーザーや顧客へのサービス提供の仕組みを指す。

プロビジョニングツールには大きく3種類あります。

  • Bootstrapping - OSをインストール/設定
  • Configuration - ミドルウェアをインストール/設定
  • Orchestration - アプリケーションのデプロイ

Bootstrapping

名前 概要 参考リンク
Vagrant 開発環境の構築と共有を簡単に行うためのツール 開発環境の構築・共有を簡単にするVagrant入門
Amazon EC2 セキュアでサイズ変更可能なコンピューティング性能をクラウド上で提供するウェブサービス 公式
Docker コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム Docker入門(第一回)~Dockerとは何か、何が良いのか~

Configuration

名前 概要 参考リンク
Chef ファイルに記述した設定内容に応じて自動的にユーザーの作成やパッケージのインストール、設定ファイルの編集などを行うツール サーバー設定ツール「Chef」の概要と基礎的な使い方
Ansible 設定ファイルがシンプルで、管理対象サーバーに特別なソフトウェアをインストールすることなく利用できるなど、最小限の手間で各種設定を自動化できるのが特徴 Ansibleをはじめる人に。
Puppet スタンドアロンおよびクライアント/サーバー構成でサーバー設定を集中管理できる設定管理ツール 公式

Orchestration

名前 概要 参考リンク
Capistrano Ruby 製の自動デプロイ (& サーバー操作) ツールで複雑な Rails 製アプリケーションのデプロイ作業をコマンド数行でさくっと片付けられるようになる 公式
AWS Elastic Beanstalk Java、.NET、PHP、Node.js、Python、Ruby、Go および Docker を使用して開発されたウェブアプリケーションやサービスを、Apache、Nginxなどの使い慣れたサーバーでデプロイおよびスケーリングするための、使いやすいサービス 公式
Amazon Elastic Container Service Docker コンテナアプリケーションを AWS で簡単に実行、スケール、保護し、コンテナとしてローカルでパッケージングされたアプリケーションは、Amazon ECS によって管理されるコンテナと同様にデプロイすることが可能 公式

CI

以下はWikiから引用。

継続的インテグレーション、CI(英: continuous integration)とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。エクストリーム・プログラミング (XP) のプラクティスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する[1]。特に、1990年代後半以降の開発においては、継続的インテグレーションをサポートするソフトウェアを使用する傾向が強まってきた。

簡単にまとめると開発や保守を円滑にすすめるための仕組みです。

名前 概要 詳しくは参考リンク
Jenkins ソフトウェアのビルド、検証、サーバへのインストール等の一連作業を自動化する事が出来るツール サルでもわかるJenkins入門〜自動テスト環境を構築しよう
Travis CI GitHub上のソフトウェアのビルドやテストを行う、オンラインで分散型のサービス GitHubと連携できる継続的インテグレーションツール「Travis CI」入門
Bamboo 継続的インテグレーション、デプロイメント、デリバリーを行うプロフェッショナルチームに選ばれているツール 公式
Circle CI 継続的インテグレーションツール「Jenkins」と同様な機能を提供し、ビルド/テスト/デプロイなどについて自動実行できるサービス 【CircleCI】CircleCI 2.0からはじめる個人での簡単なCI導入方法 - githubとの連携まで

システム監視系

システムの運用に欠かせない監視系ツール、ログ収集、通知など様々なツールやサービスのご紹介です。

名前 概要 詳しくは参考リンク
Munin サーバーの稼働状況をグラフ表示するツール Muninでかんたんサーバー監視
サーバー監視ツール Munin
Nagios 指定されたサービスを監視し、有事の際にユーザーに通知するソフトウェア Nagiosの基礎
今更だけど、 Nagios について知っておきたい5つのこと
Zabbix システム全体を監視することが可能なソフトウェア Zabbixとは?
統合監視ツール「Zabbix」によるサーバー監視
Kibana データを解析、可視化するツール Kibanaで簡単! サクサク ビジュアライズしよう!
New Relic ソフトウェアのパフォーマンス分析サービス New Relic の各製品紹介: New Relic ってアプリケーションパフォーマンス監視ツールじゃないの?
パフォーマンス監視サービスのNew Relicが超便利な件
Ganglia システム監視ツール Ganglia でエンタープライズ・クラスターを監視する
Gangliaでシステムモニタリング
RRDTool データを格納し、それをグラフ化するツール RRDtool
RRDtool x Grafana で可視化する
CloudForecast RRDToolのラッパー的なツール CloudForecastっていうリソース監視のツール/フレームワーク作った
リソースモニタリングツール「CloudForecast」入門
PagerDuty 様々な監視ツールからのアラート通知を集約して、様々なアクションを実行できるサービス PagerDutyを使ってみた
PagerDuty を使ってみる
Google Stackdriver アラート通知や、指定したURLが外部からアクセスできるかどうか監視するサービス Stackdriverを触ってみた
GCP から AWS までモニタリングできる Google Stackdriver を紹介!
Cacti リソースを収集し、グラフなどを作成することができるツール https://knowledge.sakura.ad.jp/618/
mackerel 死活監視、パフォーマンスモニタリング、収集したメトリックのグラフ化などができるサービス mackerel
サーバー監視サービス(Mackerel)
sensu Nagionsをよくしようとした、「Ruby」製のオープンソース監視プラットフォーム 今、話題の監視ツール「Sensu」とは?――基本的な構成、監視の仕組みを理解する
次世代監視ツール Sensu リファレンス
CloudWatch AWSで実行されているアプリケーションをリアルタイムでモニタリングするサービス Amazon CloudWatch とは?
AWSの監視ツール「CloudWatch」で何ができるの?
Norikra データの集計・検索・結合等などできるツール ログ解析にNorikraを使ってみた
Norikraの使い方をサンプルのクエリとイベントを交えて解説
Fluentd ログ収集管理ツール 柔軟なログ収集を可能にする「fluentd」入門
fluentd の基礎知識
Growth Forecast Webサーバとして動作して、WebAPI経由で受け取ったデータを元にグラフ化をしてくれるツール GrowthForecastというグラフ表示ツールで捗る話
手軽にデータをグラフ化するGrowthForecastのインストールと使い方
consul-alerts health checkの状態を監視し問題があれば通知するツール consul & consul-alerts を使った監視システム
Xymon ネットワーク監視ソフトウェア Xymon Tips and Tricks
Xymon(シモン or サイモン)とは?
Sentry アプリケーションからイベントログを送信して、それを表示してくれるツール イベントログ収集ツールの Sentry が凄そう
RailsアプリケーションにSentryを導入する
Prometheus 監視対象にアクセスしてデータを収集するツール 次世代監視の大本命! Prometheus を実運用してみた
Prometheusでのさまざまな監視データ取得法

おわりに

こうしてまとめてみると本当にさまざまなサービスやツールが存在しますよね。
全てを勉強している暇はないので自身の環境に合わせたものを取捨選択する必要があります。
効率的にシステムやアプリケーションを構築して、安全に運用して行きましょう!