├── Makefile ├── README.md ├── circle.yml ├── docker-image ├── Dockerfile └── etc │ ├── fluent-bit-forwarder.conf │ ├── fluent-bit.conf │ └── parsers.conf ├── flatten.go ├── fluent-bit-daemonset.yaml ├── glide.lock ├── glide.yaml └── out_sls.go /Makefile: -------------------------------------------------------------------------------- 1 | DOCKER_IMAGE_NAME ?= archon-controller 2 | DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) 3 | 4 | all: glide plugin 5 | 6 | glide: 7 | glide install 8 | 9 | plugin: 10 | go build -buildmode=c-shared -o out_sls.so . 11 | cp out_sls.so docker-image/ 12 | 13 | clean: 14 | rm -rf *.so *.h *~ 15 | 16 | docker: 17 | @echo ">> building docker image" 18 | @docker build -t "$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG)" docker-image 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fluent Bit Aliyun 2 | 3 | [![CircleCI](https://circleci.com/gh/kubeup/fluent-bit-aliyun/tree/master.svg?style=shield)](https://circleci.com/gh/kubeup/fluent-bit-aliyun) 4 | 5 | Fluent Bit output plugin which sends logs to [Aliyun Simple Log Service(SLS)](https://cn.aliyun.com/product/sls). 6 | You can do realtime analysis and archiving using other Aliyun products. Check Aliyun 7 | documents for detailed usage. 8 | 9 | ## Installing 10 | 11 | Currently we only provide Docker image for Linux machines at [Docker Hub](https://hub.docker.com/r/kubeup/fluent-bit-aliyun/). 12 | If you're not using Docker, you can compile the plugin from source. 13 | 14 | ### Docker 15 | 16 | Docker supports fluentd as a log driver. You can launch `fluent-bit-aliyun` in a container 17 | and ask Docker to send logs to it. 18 | 19 | ``` 20 | $ docker run -d --network host -e ALIYUN_ACCESS_KEY=YOUR_ACCESS_KEY -e ALIYUN_ACCESS_KEY_SECRET=YOUR_ACCESS_KEY_SECRET -e ALIYUN_SLS_PROJECT=YOUR_PROJECT -e ALIYUN_SLS_LOGSTORE=YOUR_LOGSTORE -e ALIYUN_SLS_ENDPOINT=cn-hangzhou.log.aliyuncs.com kubeup/fluent-bit-aliyun:v0.1.0 /fluent-bit/bin/fluent-bit -c /fluent-bit/etc/fluent-bit-forwarder.conf -e /fluent-bit/out_sls.so 21 | $ docker run --log-driver=fluentd -d nginx 22 | ``` 23 | 24 | You can also set fluentd as your default log driver by adding `--log-driver=fluentd` 25 | to Docker daemon. 26 | 27 | ### Kubernetes 28 | 29 | We use `DaemonSet` to deploy `fluent-bit-aliyun` on all nodes which will collect Docker 30 | logs from all pods on each machine. The `kubernetes` filter will add tags from pod metadata. 31 | 32 | First we create a `Secret` containing all the configurations. 33 | 34 | ``` 35 | $ kubectl create secret generic fluent-bit-config --namespace=kube-system --from-literal=ALIYUN_ACCESS_KEY=YOUR_ACCESS_KEY --from-literal=ALIYUN_ACCESS_KEY_SECRET=YOUR_ACCESS_KEY_SECRET --from-literal=ALIYUN_SLS_PROJECT=YOUR_PROJECT --from-literal=ALIYUN_SLS_LOGSTORE=YOUR_LOGSTORE --from-literal=ALIYUN_SLS_ENDPOINT=cn-hangzhou.log.aliyuncs.com 36 | ``` 37 | 38 | Then we deploy the `DaemonSet`. 39 | 40 | ``` 41 | $ kubectl create -f https://raw.githubusercontent.com/kubeup/fluent-bit-aliyun/master/fluent-bit-daemonset.yaml 42 | ``` 43 | 44 | We could check the status. 45 | 46 | ``` 47 | $ kubectl get pods --namespace=kube-system 48 | ``` 49 | 50 | ## Configurations 51 | 52 | You can config the plugin using environment variables. We support these configs: 53 | 54 | - ALIYUN_ACCESS_KEY 55 | - ALIYUN_ACCESS_KEY_SECRET 56 | - ALIYUN_SLS_PROJECT 57 | - ALIYUN_SLS_LOGSTORE 58 | - ALIYUN_SLS_ENDPOINT 59 | 60 | You should consider creating a dedicated account in [RAM](https://cn.aliyun.com/product/ram) 61 | just for logging for better security protection. 62 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | machine: 2 | environment: 3 | DOCKER_IMAGE_NAME: kubeup/fluent-bit-aliyun 4 | USER: kubeup 5 | REPO: fluent-bit-aliyun 6 | pre: 7 | - sudo curl -L -o /usr/bin/docker 'https://s3-external-1.amazonaws.com/circle-downloads/docker-1.9.1-circleci' 8 | - sudo chmod 0755 /usr/bin/docker 9 | - sudo curl -L 'https://github.com/aktau/github-release/releases/download/v0.6.2/linux-amd64-github-release.tar.bz2' | tar xvjf - --strip-components 3 -C $HOME/bin 10 | - sudo curl -L 'https://github.com/Masterminds/glide/releases/download/v0.12.3/glide-v0.12.3-linux-amd64.tar.gz' | tar xvzf - -C $HOME/bin 11 | - sudo mv $HOME/bin/linux-amd64/glide $HOME/bin/ 12 | services: 13 | - docker 14 | 15 | dependencies: 16 | pre: 17 | - docker info 18 | override: 19 | - mkdir -p $HOME/.go_workspace/src/github.com/kubeup 20 | - ln -sf $HOME/$CIRCLE_PROJECT_REPONAME $HOME/.go_workspace/src/github.com/kubeup/$CIRCLE_PROJECT_REPONAME 21 | - glide install 22 | - go build -buildmode=c-shared -o out_sls.so github.com/kubeup/fluent-bit-aliyun 23 | - cp out_sls.so docker-image/ 24 | - | 25 | if [ -n "$CIRCLE_TAG" ]; then 26 | make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME DOCKER_IMAGE_TAG=$CIRCLE_TAG 27 | else 28 | make docker DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME 29 | fi 30 | post: 31 | - docker images 32 | 33 | test: 34 | override: 35 | - go test github.com/kubeup/fluent-bit-aliyun 36 | 37 | deployment: 38 | hub_branch: 39 | branch: master 40 | owner: kubeup 41 | commands: 42 | - docker login -e $DOCKER_EMAIL -u $DOCKER_LOGIN -p $DOCKER_PASSWORD 43 | - docker push $DOCKER_IMAGE_NAME 44 | hub_tag: 45 | tag: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/ 46 | owner: kubeup 47 | commands: 48 | - docker login -e $DOCKER_EMAIL -u $DOCKER_LOGIN -p $DOCKER_PASSWORD 49 | - docker push $DOCKER_IMAGE_NAME 50 | -------------------------------------------------------------------------------- /docker-image/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM fluent/fluent-bit:0.11 2 | USER root 3 | COPY etc /fluent-bit/etc/ 4 | COPY out_sls.so /fluent-bit/ 5 | CMD ["/fluent-bit/bin/fluent-bit", "-c", "/fluent-bit/etc/fluent-bit.conf", "-e", "/fluent-bit/out_sls.so"] 6 | -------------------------------------------------------------------------------- /docker-image/etc/fluent-bit-forwarder.conf: -------------------------------------------------------------------------------- 1 | [SERVICE] 2 | Flush 1 3 | Daemon Off 4 | Log_Level info 5 | Parsers_File parsers.conf 6 | 7 | [INPUT] 8 | Name forward 9 | Listen 0.0.0.0 10 | Port 24224 11 | Chunk_Size 32 12 | Buffer_Size 64 13 | 14 | [OUTPUT] 15 | Name sls 16 | Match * 17 | -------------------------------------------------------------------------------- /docker-image/etc/fluent-bit.conf: -------------------------------------------------------------------------------- 1 | [SERVICE] 2 | Flush 1 3 | Daemon Off 4 | Log_Level info 5 | Parsers_File parsers.conf 6 | 7 | [INPUT] 8 | Name tail 9 | Tag kube.* 10 | Path /var/log/containers/*.log 11 | Parser docker 12 | DB /var/log/flb_kube.db 13 | Mem_Buf_Limit 5MB 14 | 15 | [FILTER] 16 | Name kubernetes 17 | Match kube.* 18 | Kube_URL https://kubernetes.default.svc:443 19 | Merge_JSON_Log On 20 | 21 | [OUTPUT] 22 | Name sls 23 | Match * 24 | -------------------------------------------------------------------------------- /docker-image/etc/parsers.conf: -------------------------------------------------------------------------------- 1 | [PARSER] 2 | Name apache 3 | Format regex 4 | Regex ^(?[^ ]*) [^ ]* (?[^ ]*) \[(?