如何為你的平臺部署一個公開的系統狀態頁

4 贊 回覆發表於2015-09-03

如果你是一個系統管理員,負責關鍵的 IT 基礎設定或公司的服務,你將明白有效的溝通在日常任務中的重要性。假設你的線上儲存伺服器故障了。你希望團隊所有人達成共識你好儘快的解決問題。當你忙來忙去時,你不會想一半的人問你為什麼他們不能訪問他們的文件。當一個維護計劃快到時間了你想在計劃前提醒相關人員,這樣避免了不必要的開銷。

這一切的要求或多或少改進了你、你的團隊、和你服務的使用者之間溝通渠道。一個實現它的方法是維護一個集中的系統狀態頁面,報告和記錄故障停機詳情、進度更新和維護計劃等。這樣,在故障期間你避免了不必要的打擾,也可以提醒一些相關方,以及加入一些可選的狀態更新。

有一個不錯的開源, 自承載系統狀態頁解決方案叫做 Cachet。在這個教程,我將要描述如何用 Cachet 部署一個自承載系統狀態頁面。

Cachet 特性

在詳細的配置 Cachet 之前,讓我簡單的介紹一下它的主要特性。

  • 全 JSON API:Cachet API 可以讓你使用任意的外部程式或指令碼(例如,uptime 指令碼)連線到 Cachet 來自動報告突發事件或更新狀態。
  • 認證:Cachet 支援基礎認證和 JSON API 的 API 令牌,所以只有認證使用者可以更新狀態頁面。
  • 衡量系統:這通常用來展現隨著時間推移的自定義資料(例如,伺服器負載或者響應時間)。
  • 通知:可選地,你可以給任一註冊了狀態頁面的人傳送突發事件的提示郵件。
  • 多語言:狀態頁被翻譯為11種不同的語言。
  • 雙因子認證:這允許你使用 Google 的雙因子認證來提升 Cachet 管理賬戶的安全性。
  • 跨資料庫支援:你可以選擇 MySQL,SQLite,Redis,APC 和 PostgreSQL 作為後端儲存。

剩下的教程,我會說明如何在 Linux 上安裝配置 Cachet。

第一步:下載和安裝 Cachet

Cachet 需要一個 web 伺服器和一個後端資料庫來運轉。在這個教程中,我將使用 LAMP 架構。以下是一些特定發行版上安裝 Cachet 和 LAMP 架構的指令。

Debian,Ubuntu 或者 Linux Mint

$ sudo apt-get install curl git apache2 mysql-server mysql-client php5 php5-mysql
$ sudo git clone https://github.com/cachethq/Cachet.git /var/www/cachet
$ cd /var/www/cachet
$ sudo git checkout v1.1.1
$ sudo chown -R www-data:www-data .

在基於 Debian 的系統上設定 LAMP 架構的更多細節,參考這個教程

Fedora, CentOS 或 RHEL

在基於 Red Hat 系統上,你首先需要設定 REMI 軟體庫(以滿足 PHP 的版本需求)。然後執行下面命令。

$ sudo yum install curl git httpd mariadb-server
$ sudo yum --enablerepo=remi-php56 install php php-mysql php-mbstring
$ sudo git clone https://github.com/cachethq/Cachet.git /var/www/cachet
$ cd /var/www/cachet
$ sudo git checkout v1.1.1
$ sudo chown -R apache:apache .
$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --reload
$ sudo systemctl enable httpd.service; sudo systemctl start httpd.service
$ sudo systemctl enable mariadb.service; sudo systemctl start mariadb.service

在基於 Red Hat 系統上設定 LAMP 的更多細節,參考這個教程

配置 Cachet 的後端資料庫

下一步是配置後端資料庫。

登入到 MySQL/MariaDB 服務,然後建立一個空的資料庫稱為‘cachet’。

$ sudo mysql -uroot -p
mysql> create database cachet;
mysql> quit

現在用一個示例配置檔案建立一個 Cachet 配置檔案。

$ cd /var/www/cachet
$ sudo mv .env.example .env

在 .env 檔案裡,填寫你自己設定的資料庫資訊(例如,DB_*)。其他的欄位先不改變。

APP_ENV=production
APP_DEBUG=false
APP_URL=http://localhost
APP_KEY=SomeRandomString

DB_DRIVER=mysql
DB_HOST=localhost
DB_DATABASE=cachet
DB_USERNAME=root
DB_PASSWORD=<root-password>

CACHE_DRIVER=apc
SESSION_DRIVER=apc
QUEUE_DRIVER=database

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ADDRESS=null
MAIL_NAME=null

REDIS_HOST=null
REDIS_DATABASE=null
REDIS_PORT=null

第三步:安裝 PHP 依賴和執行資料庫遷移

下面,我們將要安裝必要的PHP依賴包。我們會使用 composer 來安裝。如果你的系統還沒有安裝 composer,先安裝它:

$ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

現在開始用 composer 安裝 PHP 依賴包。

$ cd /var/www/cachet
$ sudo composer install --no-dev -o

下面執行一次性的資料庫遷移。這一步會在我們之前建立的資料庫裡面建立那些所需的表。

$ sudo php artisan migrate

假設在 /var/www/cachet/.env 的資料庫配置無誤,資料庫遷移應該像下面顯示一樣成功完成。

下面,建立一個金鑰,它將用來加密進入 Cachet 的資料。

$ sudo php artisan key:generate
$ sudo php artisan config:cache

生成的應用金鑰將自動新增到你的 .env 檔案 APP_KEY 變數中。你不需要自己編輯 .env。

第四步:配置 Apache HTTP 服務

現在到了配置執行 Cachet 的 web 服務的時候了。我們使用 Apache HTTP 伺服器,為 Cachet 建立一個新的虛擬主機,如下:

Debian,Ubuntu 或 Linux Mint

$ sudo vi /etc/apache2/sites-available/cachet.conf
<VirtualHost *:80>
    ServerName cachethost
    ServerAlias cachethost
    DocumentRoot "/var/www/cachet/public"
    <Directory "/var/www/cachet/public">
        Require all granted
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

啟用新虛擬主機和 mod_rewrite:

$ sudo a2ensite cachet.conf
$ sudo a2enmod rewrite
$ sudo service apache2 restart

Fedora, CentOS 或 RHEL

在基於 Red Hat 系統上,建立一個虛擬主機檔案,如下:

$ sudo vi /etc/httpd/conf.d/cachet.conf
<VirtualHost *:80>
    ServerName cachethost
    ServerAlias cachethost
    DocumentRoot "/var/www/cachet/public"
    <Directory "/var/www/cachet/public">
        Require all granted
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

現在過載 Apache 配置:

$ sudo systemctl reload httpd.service

第五步:配置 /etc/hosts 來測試 Cachet

這時候,初始的 Cachet 狀態頁面應該啟動執行了,現在測試一下。

由於 Cachet 被配置為Apache HTTP 服務的虛擬主機,我們需要調整你的客戶機的 /etc/hosts 來訪問他。你將從這個客戶端電腦訪問 Cachet 頁面。(LCTT 譯註:如果你給了這個頁面一個正式的主機地址,則不需要這一步。)

開啟 /etc/hosts,加入如下行:

$ sudo vi /etc/hosts
<cachet 伺服器的 IP 地址>    cachethost

上面名為“cachethost”必須匹配 Cachet 的 Apache 虛擬主機檔案的 ServerName。

測試 Cachet 狀態頁面

現在你準備好訪問 Cachet 狀態頁面。在你瀏覽器位址列輸入 http://cachethost。你將被轉到如下的 Cachet 狀態頁的初始化設定頁面。

選擇 cache/session 驅動。這裡 cache 和 session 驅動兩個都選“File”。

下一步,輸入關於狀態頁面的基本資訊(例如,站點名稱、域名、時區和語言),以及管理員認證賬戶。

你的狀態頁初始化就要完成了。

繼續建立元件(你的系統單元)、事件或者任意你要做的維護計劃。

例如,增加一個元件:

增加一個維護計劃:

公共 Cachet 狀態頁就像這樣:

整合了 SMTP,你可以在狀態更新時傳送郵件給訂閱者。並且你可以使用 CSS 和 markdown 格式來完全自定義佈局和狀態頁面。

結論

Cachet 是一個相當易於使用,自託管的狀態頁面軟體。Cachet 一個高階特性是支援全 JSON API。使用它的 RESTful API,Cachet 可以輕鬆連線單獨的監控後端(例如,Nagios),然後回饋給 Cachet 事件報告並自動更新狀態。比起手工管理一個狀態頁它更快和有效率。

最後一句,我喜歡提及一個事。用 Cachet 設定一個漂亮的狀態頁面是很簡單的,但要將這個軟體用好並不像安裝它那麼容易。你需要完全保障所有 IT 團隊習慣準確及時的更新狀態頁,從而建立公共資訊的準確性。同時,你需要教使用者去檢視狀態頁面。最後,如果沒有很好的填充資料,部署狀態頁面就沒有意義,並且/或者沒有一個人檢視它。記住這個,尤其是當你考慮在你的工作環境中部署 Cachet 時。

故障排查

補充,萬一你安裝 Cachet 時遇到問題,這有一些有用的故障排查的技巧。

  1. Cachet 頁面沒有載入任何東西,並且你看到如下報錯。

    production.ERROR: exception 'RuntimeException' with message 'No supported encrypter found. The cipher and / or key length are invalid.' in /var/www/cachet/bootstrap/cache/compiled.php:6695
    

    解決方案:確保你建立了一個應用金鑰,以及明確配置快取如下所述。

    $ cd /path/to/cachet
    $ sudo php artisan key:generate
    $ sudo php artisan config:cache
    
  2. 呼叫 composer 命令時有如下報錯。

    - danielstjules/stringy 1.10.0 requires ext-mbstring * -the requested PHP extension mbstring is missing from your system.
    - laravel/framework v5.1.8 requires ext-mbstring * -the requested PHP extension mbstring is missing from your system.
    - league/commonmark 0.10.0 requires ext-mbstring * -the requested PHP extension mbstring is missing from your system.
    

    解決方案:確保在你的系統上安裝了必要的 PHP 擴充套件 mbstring ,並且相容你的 PHP 版本。在基於 Red Hat 的系統上,由於我們從 REMI-56 庫安裝PHP,所以要從同一個庫安裝擴充套件。

    $ sudo yum --enablerepo=remi-php56 install php-mbstring
    
  3. 你訪問 Cachet 狀態頁面時得到一個白屏。HTTP 日誌顯示如下錯誤。

    PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'The stream or file "/var/www/cachet/storage/logs/laravel-2015-08-21.log" could not be opened: failed to open stream: Permission denied' in /var/www/cachet/bootstrap/cache/compiled.php:12851
    

    解決方案:嘗試如下命令。

    $ cd /var/www/cachet
    $ sudo php artisan cache:clear
    $ sudo chmod -R 777 storage
    $ sudo composer dump-autoload
    

    如果上面的方法不起作用,試試禁止 SELinux:

    $ sudo setenforce 0 
    

via: http://xmodulo.com/setup-system-status-page.html

作者:Dan Nanni 譯者:wyangsun 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

相關文章