ぽよメモ

レガシーシステム考古学専攻

新入生に捧ぐPCの選び方 -選び方の基準編-

新入生の皆様,ご入学おめでとうございます.pudding_infoです.

一応PCを売ったりするバイトをしていたりもします.

多くの場合,大学入学時には「レポートとかに使うだろうから」とPCを買ってもらう,又は買うのでは無いかと思います.ただこれまでPCなんて欠片も触れてこなかったのに,いきなりどれがいいかといわれても見た目程度でしか選べない!という人も多いのでは無いでしょうか.今回はそういった方々を対象にこの記事を書いています.参考にしていただければ幸いです.

PCを選ぶ前に

お願いだから部屋でホコリを被っているだけにしてあげないでください.

購入時に気にすべきこと

気分を切り替えて選び方の基準を書いていきます.

大学生が使うために必要な最低限の要素は,多くの場合は以下の2つになるかと思います.

  • 持ち運べること
  • 動作が遅くないこと

持ち運べない,動作が遅い,これらは結果としてノートパソコンを使わなくなっていく要因になります.せっかく買うのですから,どんどん活用していきたいですよね.

持ち運べるかどうか

まず「持ち運べる」という条件から考えていきましょう.
PCの大きさは主に「インチ」で,重さは「kg(またはg)」で表すのが一般的です.分かりづらいのがインチで,これはPCの画面の対角線の長さです.

f:id:pudding_info:20170123001019j:plain

よく売られているサイズとしては15.6インチ,13.3インチ,11~12インチが上げられます.
まず最初に言っておきますが,15.6インチを買うのは辞めましょう.理由は以下の通りです.

15.6インチをオススメしない理由

大きい

画面サイズが大きくなれば本体サイズが大きくなるのは当然ですが,15.6インチのノートパソコンではおおよそ横幅37cm×奥行き26cm前後が主流です.A4のレポート用紙が29.7cm × 21cmなので,カバンに入るかどうかというサイズになります.

重い

15.6インチのノートパソコンでは2.4kg前後が主流です.

これをカバンに入れて持ち運ぶのはかなり大変であると言わざるを得ません.ちなみに有名な辞書である『広辞苑』は重さが約2.5kgあるとされています*1.つまり15.6インチのノートPCを持ち運ぶのは,広辞苑を持ち運ぶのと変わらないと言うことです.

バッテリーの持ちが悪い

15.6インチのノートパソコンについては持ち運びを考慮されていないせいか,6時間前後が主流となっています.作業内容に寄りますが実際には公称値より短くなることも多く,なかなか電源を用意しづらい持ち運び環境では,できるだけ駆動時間は長い方が望ましいと言えるでしょう.
測定基準について明記されていない場合も多いので明確には言えませんが,おおよその指標にはなるかと思います.

13.3インチ以下がオススメ

これに比べ,13.3インチのノートパソコンは大きくても横幅32cm程度,重さも1.3kg前後が主流となり,バッテリーの持ちもものに寄りますが,だいたい二倍くらいになります.12インチ以下ともなればさらに小さく軽くなります.

カバンやリュックサック等に入れて持ち運ぶことが難しくないサイズ・重さであることは非常に重要です.

最近では1kgを切る超軽量なものも少なくなく,授業や実験,研究等ノートPCを持ち運ぶ機会が年に一回でもあるならば13.3インチ以下を選択するべきでしょう.

動作が遅くないかどうか

PCの動作の速さを決める要因は主に3つです.

  1. CPU
  2. メモリ
  3. 記憶装置(SSDとかHDDとか)

CPUについて

メインの処理を担う「頭脳」です.こいつの計算が速ければ,PCの動作も速くなります.CeleronとかPentiumとかCore i7とか色々ありますが,まずこれらの一般的な力関係を示しておきます*2

Core i7 > Core i5 > Core i3 ≧ Core mシリーズ > Pentium > Celeron > Atomとか

まず,下の三つを採用したノートパソコンはとても安いです.数万円単位で値段が違います.その上でこれらを選択するのはよっぽどお金が無く,すぐに必要という場合のみにしてください.理由は単純で「遅いから」です.
どういったことをするかに関わらず,数年使っていけば徐々にPCの動作は重くなっていきます.最初からある程度余裕を持ったCPUを選んだ方が良いと思います.

よって,Core ○○シリーズを採用したノートPCにすべきでしょう.

逆に,ノートPCにおいてCore i7を選ぶメリットはあまりありません.少なくとも13.3インチ以下に限定したとき,目に見えるほどの変化が出ることはまず無いでしょう*3.価格差を考えればCore i5から無理してスペックアップするべき箇所ではないと感じます.

というわけで,Core mシリーズまたはCore i3, i5搭載のものにしましょう.

また多くの場合,周波数というよくGHzで表される値が併記されてありますが,基本的にこの値は大きければ大きいほど性能が高いと思ってください.

メモリについて

メモリはよく「作業机」に例えられます.いくら速いCPUを搭載しても,狭い机では存分に力を発揮することはできません.
一般的なラインナップは以下です.

  • 2GB:とても安いPC.少しアプリを起動するといっぱいになるためとても不便.スマートフォン以下.
  • 4GB:普通のPC.店頭では最もよく見かけるが,正直最低ライン.
  • 8GB:おすすめ.普通の人は困らない程度.

個人的には8GBを推奨したいところです.

記憶装置について

「500GB」とか「1TB」とか書いてあることが多いです.実際にデータを置いておく場所になります.
大きく分けて三種類の記憶装置があります.

  • HDD:安くて大容量.最低500GB~.たくさんのデータをため込むことができるが,その反面速度は遅い.
  • eMMC:値段の安いPCによく搭載される.容量はとても少なく32GBか64GB.USBメモリに毛が生えたようなもの.
  • SSD:高くて容量は少なめ.最近は容量も1TBくらいまで選択の余地があるが,値段の上がり方が半端じゃなくなるので256GBくらいが現実的.

HDDやeMMCのノートパソコンを買うのは辞めましょう

これまでHDDはその安価さからこれまで長らく重宝されてきましたが,遅い上に壊れやすいため,全くおすすめしません.PCの動作が重いなと思ったら,だいたいの原因はこいつです.

eMMCを搭載したPCはだいたいとても安く,小型です.容量が非常に少ないため,メインPCとして使っていくには厳しいと言わざるを得ません.

SSDは他の二つと比べて圧倒的に速いです.メモリを4GBから8GBにするか,HDDをSSDに変えるかの二択に迫られたら迷わずSSDを選ぶべきというくらい変わります.起動も,動作も,HDDとは比べものになりません.絶対にSSD搭載のノートPCを選びましょう
また128GBはメインとして使うには足りないことが多いため,最低でも256GB以上が推奨です.

価格差はどこから来るの?

おそらく以上の条件を満たすPCを選び出しても,ほとんど変わらないスペックで比較的安価なものから,おそろしく高いものまで色々あるでしょう.これらの値段の差がどこから生まれるのかについて,個人的な見解を書いておきます*4

  1. 頑丈さ
    例えばLet'sNoteはここに相当なお金をかけています.踏んでも壊れにくい,落としても壊れにくいというのは凄いことです.
  2. 軽さ・小ささ・薄さ
    ただ削るだけでは簡単に壊れてしまいます.これらの要素とPCとしての使い勝手・性能のバランスを追求した結果値段が上昇します.
  3. ディスプレイの綺麗さ
    AppleRetinaディスプレイIGZO液晶のように高解像度で美しいディスプレイを搭載している場合があります.
  4. ブランド
    PCの世界にもブランド料は絶対にあると思います.とはいえAppleVAIOMicrosoftなど有名ブランドでも,その値段に見合った性能を大抵は保有しています.一番怪しいのは国産を謳うノートPCのブランド料です.
  5. スペックに現れないパーツごとの差
    例えば同じSSD,同じCore i5でもその性能に大きな開きがある場合があります.

全てに気を配ってPCを買うというのは大変な労力です.基本的にお金は積めるだけ積むのが良いです.自ずと良い物が手に入ります.

そんなに高いPC必要なの?

そもそも本当に性能が必要な場合,ノートパソコンでは全く足りません.いわゆるクリエイターなど,本当に高性能を必要とする人にとって持ち運びするノートパソコンでは絶対的に性能が足りません.

少し高価なモバイルノートパソコン程度の性能は,まともにPCを使う上で必須のものであると言っても過言ではないと考えています.*5

まとめ

上記の条件を軽く整理すると,

  • 軽い(1.3kg以下)
  • 小さい(13.3インチ以下)
  • バッテリー持ちが良い(最低でも8時間以上)
  • Core m以上のCPUを搭載
  • メモリは8GB
  • SSD搭載(できれば256GB以上)
  • 変にケチらない

といった感じでしょうか.これに当てはまるモノを買えばだいたいオッケーです!

続編としてOffice&アクセサリ編,個人的オススメ機種編も書きます.書きました.

poyo.hatenablog.jp

poyo.hatenablog.jp

*1:第六版では3kgを超えているという情報もありました

*2:digitalista51.com

*3:2017/1/23現在,13.3インチ以下のノートPCでクアッドコアCore i7を搭載した機種は価格.comで調べた結果価格.com - 東芝 dynabook R73 R73/38M 2014年秋冬モデル 価格比較しかありませんでした.ほとんどのノートPCのCore i7Core i5と同じデュアルコアです.

*4:これは個人的見解であり,必ずしもそれが真実であるとは限りません.また他の要素もあるという方もいらっしゃるでしょう.

*5:これは個人的な見解で(ry

Prometheus + cAdvisor + GrafanaでDockerコンテナごとのリソースを可視化する

背景

コンテナ数も増え,それに依存したサービスも増える中,サーバのapt upgrade後にPT3が行方不明になってこのすばの録画が死んだこともあり,いずれこれは把握できる範囲を超えるなと思ったため,監視ツールを何か導入する必要があると考えました.

いくつか候補は挙がったのですが,最終的にZabbixを選ぶか,Prometheusを選ぶかで悩んでGrafanaが最初からサポートしているという理由でPrometheusを選択しました.

今回はPrometheusでcAdvisorから情報を取得,Grafanaで可視化するまでを行います.Alertmanagerなどの導入はちゃんとできたらまた記事にします.

使うもの

Prometheus

prometheus.io

Prometheusはサーバ側から監視先を叩きに行くPull型の監視ツールです.詳しいことはQiitaの先人におまかせします.

qiita.com

exporterと呼ばれるエンドポイントを建てて情報を収集します.今回はホストの情報を収集するためにnode-exporterを使用します.

cAdvisor

cAdvisorはDockerホスト上のコンテナの監視ツールとしてGoogleが開発しているものです.Googleさまさまです.
単体で監視を行いますが,メモリ上に直近60秒の情報を保持するのみで保存しないため,InfluxDBとよく組み合わせられています*1.このcAdvisorは実はPrometheusに対応しており,デフォルトでhttp://cAdvisorへのアドレス:8080/metricsで各種のメトリクスを取得できます.

github.com

一つのDockerホストに一つずつcAdvisorが起動していれば後はまとめて叩いて回ってデータを集計するだけでいいというわけですね(うちにはホスト一つしか無いですが

Grafana

かっこいいダッシュボードを作るアプリケーションです(ざっくり

grafana.org

テンプレートが多数公開されており,それらをカスタマイズするだけで十分な機能を得られます.

環境

  • Ubuntu Server 16.04 LTS
  • Docker version 1.13.1
  • Docker compose version 1.8.0

設定

今回は全てDockerコンテナとして建てます.
ディレクトリ構造は以下の様にします.

.
├── docker-compose.yml
├── grafana
└── prometheus
    └── prometheus.yml

外側からアクセスするGrafanaと(一応)Prometheusには静的なIPを振っておきます*2.cAdvisorは直接触らないので,Dockerのネットワーク内に閉じ込めておきます.
以下の様なネットワークを作っておきます.

$ docker network create -d bridge -o "com.docker.network.bridge.name"="monitor_nw" monitor_nw

また,下記の過去記事で作成したmacvlanドライバのdmz_nwを使用します.

poyo.hatenablog.jp

Prometheusの設定

がつがつdocker-compose.ymlを書いていきます.

version: "2"
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    expose:
      - "9090"
    networks:
      default:
        aliases:
          - prometheus
      dmz_nw:
        ipv4_address: xxx.xxx.xx.y
    restart: always
networks:
  default:
    external:
      name: monitor_nw
  dmz_nw:
    external:
      name: dmz_nw

macvlanでIPアドレスを割り振っているのでホストのポートとのマッピングはしていません.

設定ファイルであるprometheus.ymlはとりあえず最低限のことを書いておきます.
prometheus自身のメトリクスを取得する設定,後述のnode-exporterとcAdvisorから情報を取得する設定です.15秒間隔で情報を取りに行くようにしています.

global:
  scrape_interval: 15s
  external_labels:
    monitor: "monitor"

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["prometheus:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["ホストのアドレス:9100"]
        labels:
          group: "docker-host"
  - job_name: "docker"
    static_configs:
      - targets: ["cadvisor:8080"]
        labels:
          group: "docker-container"

localhostを指定するとうまく動かないので,わざわざホストのアドレスも直打ちしています.
詳しい設定は公式ドキュメントを参照してください.

node-exporterの設定

node-exporterはホストの様々な情報を取得するexporterです.そのため,ホストのルートディレクトリをマウントする必要があります..また,hostネットワークを使用する必要があるため,ホストのポートとのマッピングを行いアクセスできるようにしています.

# 省略
  node-exporter:
    image: prom/node-exporter
    container_name: node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    ports:
      - "9100:9100"
    network_mode: host
    restart: always
# 省略

cAdvisorの設定

権限を多く要求する怖いコンテナです.外側から直接アクセスできないようにDockerネットワークに封じ込めます.

# 省略
  cadvisor:
    image: google/cadvisor:latest
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro
    expose:
      - "8080"
    privileged: true
    networks:
      default:
        aliases:
          - cadvisor
    restart: always
# 省略

特にprivileged: trueが怖いのですが,僕の環境ではこれをオンにしないと動きませんでした*3

Grafanaの設定

最後にフロントエンドのGrafanaをセットアップします.今回はわざとしていませんが,過去記事のnginxとdocker-genを組み合わせたシステムでサブドメインを割り当てることも出来ると思います.
また,普通に起動するとusernameがadmin,パスワードもadminの状態になっており,サインアップも勝手に出来るようになっているので環境変数でそのあたりを制御します.

# 省略
  grafana:
    image: grafana/grafana
    container_name: grafana
    volumes:
      - ./grafana:/var/lib/grafana
    networks:
      default:
        aliases:
          - grafana
      dmz_nw:
        ipv4_address: xxx.xxx.xx.z
    restart: always
    environment:
      GF_SECURITY_ADMIN_USER: hoge
      GF_SECURITY_ADMIN_PASSWORD: fuga
      GF_USERS_ALLOW_SIGN_UP: "false"
      GF_USERS_ALLOW_ORG_CREATE: "false"
# 省略

GF_SECURITY_ADMIN_USERGF_SECURITY_ADMIN_PASSWORDがそれぞれ初期管理ユーザのユーザ名とパスワードになります.
GF_USERS_ALLOW_SIGN_UPはサインアップの無効化で,トップページからサインアップの項目が消えます.GF_USERS_ALLOW_ORG_CREATEは管理権限のあるユーザ以外のorgnizationの作成を無効にします.

起動

$ docker-compose up -d

この状態でまずprometheusに割り当てたアドレスxxx.xxx.xx.y:9090にアクセスして表示されるかを確認します.

次に,Grafanaに割り当てたxxx.xxx.xx.z:3000を開いて設定したユーザ名とパスワードでログインします.DataSourceを追加するときソースの種類をPrometheusで選択するとhttp://localhost:9090がサジェストされますがこれは使いません.prometheusで名前解決できるようになっているので,http://prometheus:9090/を指定します.

Grafanaのテンプレートは以下のものを使用しました.

grafana.net

何もいじっていない状態で以下の様になりました.loadの値が取れていませんが,まぁおいおい自分でいじくっていきたいと思います.

f:id:pudding_info:20170301005602p:plain

まとめ

思ったより簡単に値を取るところまではできました.後はGrafanaからクエリを叩いて表示していくだけです.難しそう.

また今回はAlertmanagerを含めていません.ここまではcAdvisor + InfluxDBでもできることになってしまうので,次はアラートの設定もしていこうと思います.

*1:この場合アラートなどの機能は無いので,今回はPrometheusのエンドポイントとしてのみ使用します

*2:取得できるメトリクスを見たいのと,クエリを簡単に確かめたいため.

*3:もしかしてたまたま?他の人の例では見ないので,もしかしたら勘違いかもしれないです.

nginxとdocker-genとその他を使って良い感じにする(2)~gitlab構築~

poyo.hatenablog.jp

前回の続きです.今回はgitlabの構築をしたいと思います.

環境

前回と同じ

構築したい環境

gitlab.hoge.comという感じのサブドメイン,かつhttpsでgitlabにアクセスできるようにする.

前準備

前回で構築した環境が動いていれば問題ないです.

gitlabのコンテナを建てる

Gitlabのdockerコンテナ構築にはsameersbn/docker-gitlabがよく用いられているように思いますが,公式のコンテナがあるのでそっちを使っていきたいと思います.

ディレクトリ構成は以下の様にします.

.
├── config
├── data
├── docker-compose.yml
└── logs

設定

version: "2"
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    volumes:
      - ./data:/var/opt/gitlab
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
    restart: always
    environment:
      VIRTUAL_HOST: gitlab.hoge.com
      VIRTUAL_NETWORK: shared
      VIRTUAL_PORT: 80
      LETSENCRYPT_HOST: gitlab.hoge.com
      LETSENCRYPT_EMAIL: hoge@mail.hoge.com
      GITLAB_OMNIBUS_CONFIG: |
        external_url "https://gitlab.hoge.com"
        nginx['listen_port'] = 80
        nginx['listen_https'] = false
        nginx['proxy_set_headers'] = {
          "X-Forwarded-Proto" => "https",
          "X-Forwarded-Ssl" => "on"
        }
        gitlab_rails['time_zone'] = 'Asia/Tokyo'
    networks:
      - shared

networks:
  shared:
    external:
      name: internal_shared

gitlabのhttps化には色々手段が考えられると思いますし,直接gitlabを外部に晒す方法であれば直接gitlabに対してletsencryptで取得した証明書を食わせるべきですが,今回はそれらを全てフロントエンドのnginxに任せてしまいます*1

通常external_url "https://gitlab.hoge.com"を指定すると証明書が要求されますが,以降のnginxに関する設定をすることでリバースプロキシにそれらの処理をゆだねることが出来ます.

起動

$ docker-compose up

gitlabはかなりメモリを食うようです.実験のためにMac上のVagrantで起動しようとしたときはひたすらエラーでなんともなりませんでしたが,サーバ上ではうまく動いてくれました.
初回起動時には様々な設定を行うようでそこそこの時間がかかり,それまではアクセスしてもエラーが帰ってくるだけになります.

httpsでアクセスできるようになったら成功です.初回ログインに成功したらアカウントの登録を止めておきましょう.

うまくいってないこと

メールの設定もしたのですが確認メールが送られてきません.ルータのログも確認しましたが特にそこでフィルタリングしているわけではなく,どうもgitlabの内部のエラーで送れていないようです.何度か設定をいじくり回したのでそこで何かおかしくなったような気もするのですが…

まとめ

ずっとgithubに頼っていましたがどうしてもgitlabのCI/CDをためしてみたかったのでインストールしました.簡単に起動できて最高な時代になったなぁ…

*1:なぜかというと最初は前回作製したcertsディレクトリをマウントしてやってみたのですがどうもうまく行かなかったためです.