如何为你的平台部署一个公开的系统状态页

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介:

如果你是一个系统管理员,负责关键的 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

 
 
  1. $ sudo apt-get install curl git apache2 mysql-server mysql-client php5 php5-mysql
  2. $ sudo git clone https://github.com/cachethq/Cachet.git /var/www/cachet
  3. $ cd /var/www/cachet
  4. $ sudo git checkout v1.1.1
  5. $ sudo chown -R www-data:www-data .
AI 代码解读

在基于 Debian 的系统上设置 LAMP 架构的更多细节,参考这个教程

Fedora, CentOS 或 RHEL

在基于 Red Hat 系统上,你首先需要设置 REMI 软件库(以满足 PHP 的版本需求)。然后执行下面命令。

 
 
  1. $ sudo yum install curl git httpd mariadb-server
  2. $ sudo yum --enablerepo=remi-php56 install php php-mysql php-mbstring
  3. $ sudo git clone https://github.com/cachethq/Cachet.git /var/www/cachet
  4. $ cd /var/www/cachet
  5. $ sudo git checkout v1.1.1
  6. $ sudo chown -R apache:apache .
  7. $ sudo firewall-cmd --permanent --zone=public --add-service=http
  8. $ sudo firewall-cmd --reload
  9. $ sudo systemctl enable httpd.service; sudo systemctl start httpd.service
  10. $ sudo systemctl enable mariadb.service; sudo systemctl start mariadb.service
AI 代码解读

在基于 Red Hat 系统上设置 LAMP 的更多细节,参考这个教程

配置 Cachet 的后端数据库

下一步是配置后端数据库。

登录到 MySQL/MariaDB 服务,然后创建一个空的数据库称为‘cachet’。

 
 
  1. $ sudo mysql -uroot -p
AI 代码解读
 
 
  1. mysql> create database cachet;
  2. mysql> quit
AI 代码解读

现在用一个示例配置文件创建一个 Cachet 配置文件。

 
 
  1. $ cd /var/www/cachet
  2. $ sudo mv .env.example .env
AI 代码解读

在 .env 文件里,填写你自己设置的数据库信息(例如,DB_*)。其他的字段先不改变。

 
 
  1. APP_ENV=production
  2. APP_DEBUG=false
  3. APP_URL=http://localhost
  4. APP_KEY=SomeRandomString
  5. DB_DRIVER=mysql
  6. DB_HOST=localhost
  7. DB_DATABASE=cachet
  8. DB_USERNAME=root
  9. DB_PASSWORD=<root-password>
  10. CACHE_DRIVER=apc
  11. SESSION_DRIVER=apc
  12. QUEUE_DRIVER=database
  13. MAIL_DRIVER=smtp
  14. MAIL_HOST=mailtrap.io
  15. MAIL_PORT=2525
  16. MAIL_USERNAME=null
  17. MAIL_PASSWORD=null
  18. MAIL_ADDRESS=null
  19. MAIL_NAME=null
  20. REDIS_HOST=null
  21. REDIS_DATABASE=null
  22. REDIS_PORT=null
AI 代码解读

第三步:安装 PHP 依赖和执行数据库迁移

下面,我们将要安装必要的PHP依赖包。我们会使用 composer 来安装。如果你的系统还没有安装 composer,先安装它:

 
 
  1. $ curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
AI 代码解读

现在开始用 composer 安装 PHP 依赖包。

 
 
  1. $ cd /var/www/cachet
  2. $ sudo composer install --no-dev -o
AI 代码解读

下面执行一次性的数据库迁移。这一步会在我们之前创建的数据库里面创建那些所需的表。

 
 
  1. $ sudo php artisan migrate
AI 代码解读

假设在 /var/www/cachet/.env 的数据库配置无误,数据库迁移应该像下面显示一样成功完成。

下面,创建一个密钥,它将用来加密进入 Cachet 的数据。

 
 
  1. $ sudo php artisan key:generate
  2. $ sudo php artisan config:cache
AI 代码解读

生成的应用密钥将自动添加到你的 .env 文件 APP_KEY 变量中。你不需要自己编辑 .env。

第四步:配置 Apache HTTP 服务

现在到了配置运行 Cachet 的 web 服务的时候了。我们使用 Apache HTTP 服务器,为 Cachet 创建一个新的虚拟主机,如下:

Debian,Ubuntu 或 Linux Mint

 
 
  1. $ sudo vi /etc/apache2/sites-available/cachet.conf
AI 代码解读
 
 
  1. <VirtualHost *:80>
  2. ServerName cachethost
  3. ServerAlias cachethost
  4. DocumentRoot "/var/www/cachet/public"
  5. <Directory "/var/www/cachet/public">
  6. Require all granted
  7. Options Indexes FollowSymLinks
  8. AllowOverride All
  9. Order allow,deny
  10. Allow from all
  11. </Directory>
  12. </VirtualHost>
AI 代码解读

启用新虚拟主机和 mod_rewrite:

 
 
  1. $ sudo a2ensite cachet.conf
  2. $ sudo a2enmod rewrite
  3. $ sudo service apache2 restart
AI 代码解读

Fedora, CentOS 或 RHEL

在基于 Red Hat 系统上,创建一个虚拟主机文件,如下:

 
 
  1. $ sudo vi /etc/httpd/conf.d/cachet.conf
AI 代码解读
 
 
  1. <VirtualHost *:80>
  2. ServerName cachethost
  3. ServerAlias cachethost
  4. DocumentRoot "/var/www/cachet/public"
  5. <Directory "/var/www/cachet/public">
  6. Require all granted
  7. Options Indexes FollowSymLinks
  8. AllowOverride All
  9. Order allow,deny
  10. Allow from all
  11. </Directory>
  12. </VirtualHost>
AI 代码解读

现在重载 Apache 配置:

 
 
  1. $ sudo systemctl reload httpd.service
AI 代码解读

第五步:配置 /etc/hosts 来测试 Cachet

这时候,初始的 Cachet 状态页面应该启动运行了,现在测试一下。

由于 Cachet 被配置为Apache HTTP 服务的虚拟主机,我们需要调整你的客户机的 /etc/hosts 来访问他。你将从这个客户端电脑访问 Cachet 页面。(LCTT 译注:如果你给了这个页面一个正式的主机地址,则不需要这一步。)

打开 /etc/hosts,加入如下行:

 
 
  1. $ sudo vi /etc/hosts
AI 代码解读
 
 
  1. <cachet 服务器的 IP 地址> cachethost
AI 代码解读

上面名为“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 页面没有加载任何东西,并且你看到如下报错。

       
       
    1. 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
    AI 代码解读

    解决方案:确保你创建了一个应用密钥,以及明确配置缓存如下所述。

       
       
    1. $ cd /path/to/cachet
    2. $ sudo php artisan key:generate
    3. $ sudo php artisan config:cache
    AI 代码解读
  2. 调用 composer 命令时有如下报错。

       
       
    1. - danielstjules/stringy 1.10.0 requires ext-mbstring * -the requested PHP extension mbstring is missing from your system.
    2. - laravel/framework v5.1.8 requires ext-mbstring * -the requested PHP extension mbstring is missing from your system.
    3. - league/commonmark 0.10.0 requires ext-mbstring * -the requested PHP extension mbstring is missing from your system.
    AI 代码解读

    解决方案:确保在你的系统上安装了必要的 PHP 扩展 mbstring ,并且兼容你的 PHP 版本。在基于 Red Hat 的系统上,由于我们从 REMI-56 库安装PHP,所以要从同一个库安装扩展。

       
       
    1. $ sudo yum --enablerepo=remi-php56 install php-mbstring
    AI 代码解读
  3. 你访问 Cachet 状态页面时得到一个白屏。HTTP 日志显示如下错误。

       
       
    1. 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
    AI 代码解读

    解决方案:尝试如下命令。

       
       
    1. $ cd /var/www/cachet
    2. $ sudo php artisan cache:clear
    3. $ sudo chmod -R 777 storage
    4. $ sudo composer dump-autoload
    AI 代码解读

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

       
       
    1. $ sudo setenforce 0
    2. 本文来自云栖社区合作伙伴“Linux中国”,原文发布日期:2015-09-03
    AI 代码解读
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
WGFIX资产设备系统 v1.0 全新发布 功能介绍
WGFIX是wgcloud团队最近发布的一个资产管理系统,免费实用,而且使用非常简单,部署也很方便,非常适合中小企业使用的一款IT固定资产管理系统
云解析地图作业问题之在搭建页面中简化数据筛选的过程如何解决
云解析地图作业问题之在搭建页面中简化数据筛选的过程如何解决
61 0
10月开发者日回顾|订单中心、排查工具、验收工具、搜索BOX全面升级,observers 支持配置化监听
10月开发者日回顾|订单中心、排查工具、验收工具、搜索BOX全面升级,observers 支持配置化监听
202 11
社区每周丨基础库更新至2.8.9及交易组件全面开放(4.10-4.14)
社区每周丨基础库更新至2.8.9及交易组件全面开放(4.10-4.14)
98 11
  Optimism链上usdc功能部署开发【详情】
Optimism是一个基于以太坊的Layer 2扩容方案,它可以在以太坊上运行与以太坊兼容的智能合约,
不可或缺的BCUninstaller:全面显示软件信息、批量垃圾删除、强制卸载程序……
不可或缺的BCUninstaller:全面显示软件信息、批量垃圾删除、强制卸载程序……
231 0
jira学习案例24-用useAuth切换登录与非登录状态
jira学习案例24-用useAuth切换登录与非登录状态
179 0
jira学习案例24-用useAuth切换登录与非登录状态
jira学习案例98-跨组件状态管理
jira学习案例98-跨组件状态管理
148 0
jira学习案例98-跨组件状态管理
jira学习案例5-用状态提升分享组件状态1 原
jira学习案例5-用状态提升分享组件状态1 原
85 0
jira学习案例5-用状态提升分享组件状态1 原
前端工作小结68-页面数据不显示
前端工作小结68-页面数据不显示
167 0
前端工作小结68-页面数据不显示
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等