Edited at

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

More than 1 year has passed since last update.


はじめに

面白い会社でインフラ兼サーバーエンジニアをしている@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でのさまざまな監視データ取得法


おわりに

こうしてまとめてみると本当にさまざまなサービスやツールが存在しますよね。

全てを勉強している暇はないので自身の環境に合わせたものを取捨選択する必要があります。

効率的にシステムやアプリケーションを構築して、安全に運用して行きましょう!