#applications #health-check #process #group #container #configuration #system

bin+lib riffol

Riffol 是一个监管进程,可以在类 Unix 系统上作为传统守护进程运行,也可以作为容器的 init 系统

5 个不稳定版本

使用旧的 Rust 2015

0.3.0 2018 年 10 月 19 日
0.2.1 2018 年 10 月 18 日
0.2.0 2018 年 10 月 11 日
0.1.2 2018 年 10 月 5 日
0.1.1 2018 年 10 月 2 日

#514 in 配置

BSD-2-Clause

80KB
1.5K SLoC

Riffol

Riffol 是一个监管进程,可以在类 Unix 系统上作为传统守护进程运行,也可以作为容器的 init 系统(如 tini)。

Riffol 可以通过创建由应用程序和健康检查组成的应用程序组进行配置。

[来源]

   +--------+
   | Riffol |
   +----+---+
        |
        |
        |
 +------v------+
 | Application |
 |    Group    +-------+-------------+
 +------+------+       |             |
        |              |             |
        |              |             |
        |              |             |
 +------v------+   +---v----+   +----v-----+
 | Application |   | Health |   | Resource |
 +-------------+   | Check  |   |  Limits  |
                   +--------+   +----------+

Riffol 使用来自 https://github.com/riboseinc/event-configuration-models 的统一配置模型来定义其配置语法、启动配置以及运行时配置。

Riffol 使用 Rust 实现。

从源代码构建

请确保已安装 Rust 环境。如果没有,请按照 Rust 安装指南 进行操作。

[来源,shell]

cargo install --git https:/github.com/riboseinc/riffol

此命令将构建一个 riffol 二进制文件并将其存储在 bin 目录下,该目录位于 $CARGO_HOME 之下 - 通常为 ~/.cargo/bin/riffol

用法

riffol [-f 配置文件]

Riffol 需要一个配置文件。默认文件位置为 /etc/riffol.conf

此位置可以通过 RIFFOL_CONFIG 环境变量或使用 -f 命令行标志来指定。

配置

初始化

创建应用程序组的主要配置

[来源]

init name {
  application_groups [
    applicationgroup.name
  ]
}

例如:

[来源]

init web {
    application_groups ["applicationgroup.webstack"]
}

应用程序组

[来源]

application_group name {
  applications [
    "application.name"
  ]
}

例如:

[来源]

application_group webstack {
  applications [
    "application.db"
    "application.www"
  ]
}

应用程序

[来源]

application "name" {
  mode application_mode
  requires [other applications]
  start [executable start args]
  stop [executable stop args]
  pidfile file
  dir working_directory
  env {
    new var1 value
    new var2 value
    pass oldname newname
  }
  env_file env_filename
  stdout stream_destination
  stderr stream_destination
  uid int
  gid int
  healthchecks [
    "healthcheck.name"
  ]
}

application_mode 可以是 oneshotsimpleforking 之一

应用程序将以干净的环境启动。可以通过 envenv_file 字段添加环境变量。

env的值可以有两种形式。命令env new <name> <value>用于创建一个新的变量并赋予其提供的值。命令env pass <oldname> <newname>用于创建一个名为newname的新变量,其值来自Riffol的环境变量oldname

[来源]

env {
    new {
        VAR1 value1
        VAR2 value2
    }
    pass {
        ENV1 VAR3
        ENV2 VAR4
    }
}

这会创建两个新的环境变量,分别为VAR1VAR2,它们的值分别为value1value2。同时,将变量ENV1ENV2传递到新变量VAR3VAR4中。

env_file <filename>读取一个环境变量的文件,每行一个环境变量,格式如下

[来源]

VAR1=value1
VAR2=value2
VAR3
VAR4=

VAR1VAR2分别设置为value1value2。而VAR3VAR4则设置为空值""。

env_file字段在env字段之前处理,因此使用env设置的变量将覆盖从env_file读取的变量。

stream_destination可以是以下之一:[source]

file [
    filename
]

[来源]

syslog {
    socket unix_sock_address
    facility syslog_facility
    severity syslog_severity
}

[来源]

rsyslog {
    address remote_inet_address
    local local_inet_address
    facility syslog_facility
    severity syslog_severity
}

syslog_facility可以是以下之一:kernusermaildaemonauthsysloglprnewsuucpcronauthprivftplocal0local1local2local3local4local5local6local7。(默认值为daemon

syslog_severity可以是以下之一:emergalertcriterrwarningnoticeinfodebug(默认值为debug

healthcheckfail可以是以下之一:startrestartstop。例如。

[来源]

application www {
  exec "/etc/init.d/http"
  dir "/var/www"
  env {
    new var1key var1value
    new var2key var2value
    pass oldname newname
  }
  env_file "/etc/httpd/morevars"
  start start
  stop stop
  restart restart
  stdout file "/var/log/riffol_www.log"
  stderr syslog {
  }
  uid 0
  gid 0
  healthchecks [
    "healthcheck.www"
  ]
  healthcheckfail restart
}

健康检查

[来源]

healthcheck name {
  checks [
    "class://value"
  ]
  interval int
  timeout int
}

有几个check

df,磁盘空闲空间。 proc,进程名称。 tcp,TCP连接。 udp,UDP连接。 http,建立HTTP连接。 https,建立HTTPS连接

参数

interval,检查的间隔(以秒为单位)。 timeout,网络连接的超时时间(以秒为单位)

例如:

[来源]

healthcheck db {
  checks [
    "df:///var/lib/mysql:512"
    "proc://mysqld",
    "tcp://127.0.0.1:3306"
  ]
  interval 60
  timeout 10
}

资源限制

[来源]

limits name {
  max_procs int
  max_mem int
}

例如。

[来源]

limits db {
  max_procs 4
  max_mem 1024
}

... Riffol?

https://en.wikipedia.org/wiki/Salmon_run#The_spawning

雌性鲑鱼的卵称为其鱼卵。为了产卵,雌性鲑鱼在砾石作为其河床的湍流处建造一个称为产卵场的窝,称为鱼窝。湍流是一种相对较浅的河段,水流湍急且流速较快。

通过在“riffol”中拼写一个O,我们将氧气的化学符号放入了这个词中:我们正在氧化 Riffol。这很有意义,因为Riffol在Rust中。

依赖项

~12–22MB
~312K SLoC