An open API service indexing awesome lists of open source software.

https://github.com/laincloud/rebellion

LAIN's component for collecting logs of LAIN and its applications
https://github.com/laincloud/rebellion

layer1

Last synced: about 1 month ago
JSON representation

LAIN's component for collecting logs of LAIN and its applications

Awesome Lists containing this project

README

          

# Rebellion

[![Build Status](https://travis-ci.org/laincloud/rebellion.svg?branch=master)](https://travis-ci.org/laincloud/rebellion) [![MIT license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://opensource.org/licenses/MIT)
[![codecov](https://codecov.io/gh/laincloud/rebellion/branch/master/graph/badge.svg)](https://codecov.io/gh/laincloud/rebellion)
[![MIT license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://opensource.org/licenses/MIT)

## Introduction
Rebellion 是 LAIN 中负责管理日志数据的 layer0 组件, 以 host 模式运行在 docker 上。但 Rebellion 并不是单进程的容器,而是由 supervisord 管理的多进程容器。Rebellion 主要包括两个部分:
- [lain-filebeat](https://github.com/laincloud/beats):负责接受日志输入、处理并发送。
- Rebellion 程序:负责在启动时生成 lain-filebeat 的配置文件。并监听 lainlet,当集群配置更新或应用更新时,及时更新lain-filebeat 的配置文件并重启 lain-filebeat。

Rebellion 目前主要处理三类日志流:

- Docker 的 Syslog:Rebellion 通过只读挂载主机的 /var/log/messages,并通过 `parse_regex_fields` 解析,通过 `tag_lain_fields` 加工,然后输出至Kafka。

- LainApp 的 log文件:Rebellion 通过只读形式挂载主机的 /data/lain/volume 目录,读取应用配置的日志文件,然后输出至 Kafka。

- Webrouter 的 access log:Rebellion 通过读取 webrouter volume 出来的*.access.log文件,使用 `parse_regex_fields` 解析得到每个请求的结构化日志,然后发送给 Kafka。

## Build and Run

### Build image
已经直接配置了 docker hub 上的自动构建。

### Run
Rebellion 的运行是以 Host 模式运行的 Container,目前已经作为 Service 在 boostrap 时就已经部署并运行了。
Service 中运行的指令为:

```bash
/usr/bin/docker run \
--name %n --rm --network=host \
-e LAINLET_PORT={{ LAINLET_PORT }} \
-v /data/lain/volumes/:/data/lain/volumes/:ro \
-v /data/lain/rebellion/var/lib/filebeat/:/var/lib/filebeat \
-v /data/lain/rebellion/logs/filebeat:/var/log/filebeat/ \
-v /data/lain/rebellion/logs/supervisor:/var/log/supervisor/ \
-v /var/log/:/var/log/syslog/:ro \
laincloud/rebellion:{{ rebellion_version }}
```

运行时的参数说明如下
- `-e LAINLET_PORT={{ lainlet_port }}`

设置环境变量NODE_NAME为主机的host_name,设置环境变量LAINLET_PORT, GRAPHITE_PORT为集群bootstrap时的lainlet_port和graphite_port。
- `-v /data/lain/volumes/:/data/lain/volumes/:ro`

以只读模式挂载lain的volume目录。
- `-v /data/lain/rebellion/var/lib/filebeat/:/var/lib/filebeat`

将 filebeat 的 registry 目录挂载到宿主机上,registry 记录了读取的文件的位置等重要信息,防止升级rebellion时丢失。
- `-v /data/lain/rebellion/logs/supervisor:/var/log/supervisor/`

挂载 Rebellion 本身的日志文件以及 filebeat 的标准输出文件。

- `-v /var/log/:/var/log/syslog/:ro`

以只读形式挂载 `/var/log/messages` 目录,读取 docker 的标准输出。

> 目前由于所有的日志都发送至Kafka,所以部署时集群应该在etcd中配置了/lain/config/kafka

## Upgrade

由于 `v2.3.0` 和 `2.0.x` 配置及收集工具不兼容,因此无法直接从 `2.0.x` 升级到 `v2.3.x` 及更高版本,需要先升级至 `v2.3.0`。

### `2.0.x` -> `v2.3.0`
执行 LAIN 的 ansible 任务 `rebellion-upgrade-2.0.x-to-v2.3.0`。

```
ansible-playbook -i playbooks/cluster -e "role=rebellion-upgrade-2.0.x-to-v2.3.0" playbooks/role.yaml
```

### `v2.3.0` -> `v2.3.x` (x > 0)
执行 LAIN 的 ansible 任务 `rebellion-upgrade`,参数 `upgrade_version` 为目的版本。

例如升级到 `v2.3.1`:

```
ansible-playbook -i playbooks/cluster -e "role=rebellion-upgrade" -e "upgrade_version=v2.3.1" playbooks/role.yaml
```

> 升级时会丢失少量日志,建议在日志输出量较低的时间段进行。

## License
Rebellion 遵循[MIT](https://github.com/laincloud/rebellion/blob/master/LICENSE)开源协议.