如何為你的平臺部署一個公開的系統狀態頁
如果你是一個系統管理員,負責關鍵的 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 時遇到問題,這有一些有用的故障排查的技巧。
-
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
-
呼叫 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
-
你訪問 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
相關文章
- 直播電商平臺開發,動態去除系統自帶標題欄、狀態列
- Atlas是一個為雲原生應用程式構建的開源部署管道平臺
- 系統狀態列和app頁面一體化APP
- 資訊系統設計一個平臺--利於實施的平臺
- 如何快速取得一個二進位制狀態的所有子狀態
- 《少女的王座》全平臺公測今日開啟!百轉千回,為你而來
- 一個基於.NET Core開源、跨平臺的倉儲管理系統
- 不同裝置如何統一語言程式設計平臺高效開發?本文為你揭秘程式設計
- 為你的論壇系統新增一個『提及』功能
- 如何設計一個電商平臺積分兌換系統?
- 網頁“黑手”如何入侵你的Windows系統網頁Windows
- 一個開源的、獨立的、可自託管的評論系統,專為現代Web平臺設計Web
- BookStack:一個開源的維基平臺
- 好好利用平臺的公開APIAPI
- 視訊直播系統原始碼,登入平臺後在首頁保持長時間亮屏狀態原始碼
- 誰將成為下一個開發平臺?
- 開放的彈性的資訊系統平臺 DIY系統
- 如何為你的開源專案釋出一個版本
- Facebook:不僅僅是廣告平臺,更 是一個豐富多彩的社交生態系統
- 【靜態化平臺】☞(一)網頁靜態化服務網頁
- 一個開放平臺架構的思考架構
- 92WCMS頁遊管理平臺系統
- 92WCMS頁遊平臺管理系統
- vue從其他頁面返回保持上一頁的狀態Vue
- SkyEye(一種軟體模擬的系統開發平臺)
- 以實現MongoDB副本集狀態的監控為例,看Telegraf系統中Exec輸入外掛如何編寫部署MongoDB
- 如何將一個HTML頁面巢狀在另一個頁面中HTML巢狀
- IBM:開創性業務平臺與生態系統的威力(附下載)IBM
- 直播系統平臺搭建,狀態列透明和程式碼設定漸變色
- 搭建自己的直播平臺,更改狀態列的字型顏色
- HKT公鏈算力挖礦系統平臺開發技術
- 系統狀態下的洞察力
- 你的第一個網頁網頁
- Linux如何檢視系統和程式的執行狀態?Linux
- 基於 PHP 的微信公眾平臺開發PHP
- NFT發行鑄造合集交易平臺系統開發原始碼部署原始碼
- 系統首頁 DIY,你的個性化需求 Pro 系統來滿足!
- 一個簡單的狀態列示例