使用Docker搭建ELK日志搜集系统(二)
2016-06-11 11:04
603 查看
导读:上篇介绍了ELF/EFK中Elasticsearch、Kibana的配置安装,这篇开始介绍Fluentd做为日志搜集工具的配置安装
Fluentd是什么?
- Fluented 是一个开源免费的日志搜集工具,经常代替Logstash(EFK),支持的插件非常多,对docker支持较好
- Fluentd尽量将数据结构化为JSON:这允许Fluentd统一处理日志数据的所有方面:收集、过滤、缓冲和跨多个源和目的地输出日志(统一日志层)
- 使用JSON进行下游数据处理要容易得多,因为它有足够的结构,可以在保持灵活模式的同时进行访问
Fluentd可以搜集那些日志
使用Fluentd搜集Docker日志配置
系统安装运行需求和建议:
- 至少一台独立的linux host centos 7.4,docker 18.06.1-ce+以上版本,建议两台做高可用
- 生产环境推荐2核4G内存
安装步骤
安装docker环境
https://www.cnblogs.com/yjb007/p/9551878.html
- 安装fluentd
mkdir -p /srv/volume/fluentd/ cd /srv/volume/fluentd/ mkdir -p plugins/ #Fluentd的Dockerfile文件 cat > Dockerfile << 'EOF' FROM fluent/fluentd:v1.2.5-debian-onbuild ENV TZ=Asia/Shanghai RUN apt-get update \ && apt-get -y install tzdata \ && apt-get -y install curl \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone RUN buildDeps="sudo make gcc g++ libc-dev ruby-dev" \ && apt-get update \ && apt-get install -y --no-install-recommends $buildDeps \ && sudo gem install \ fluent-plugin-elasticsearch \ && SUDO_FORCE_REMOVE=yes \ apt-get purge -y --auto-remove \ -o APT::AutoRemove::RecommendsImportant=false \ $buildDeps \ && rm -rf /var/lib/apt/lists/* \ /home/fluent/.gem/ruby/2.3.0/cache/*.gem COPY fluent.conf /fluentd/etc/fluent.conf EOF #Fluentd的配置文件 cat > fluent.conf << 'EOF' <source> @type forward port 24224 bind 0.0.0.0 </source> #监听TCP24224端口,转发从这个端口进来的数据,要求进来的数据格式是json格式;数据流走向<filter></filter> <filter docker.**> @type parser format json # time_format %Y-%m-%dT%H:%M:%S.%L%Z key_name log reserve_data false suppress_parse_error_log true ignore_key_not_exist true replace_invalid_sequence true </filter> #如果进来的数据的tag是以dockerk开头的字段,则进行这个对应的数据处理,tag是docker daemon中配置的 <filter docker.nginx.**> @type record_transformer enable_ruby true <record> "@timestamp" ${Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")} </record> </filter> #如果进来的数据tag匹配docker.nginx.**,则给这段数据添加一堆key,value值,这里是增加了一个@timestamp字段;原因是nginx自身的access.log日志时间格式不是%Y-%m-%dT%H:%M:%S.%L%z #只有%Y-%m-%dT%H:%M:%S.%L%z这样的事件格式kibana才能正确识别 <match docker.**> @type elasticsearch hosts 10.1.1.225:9200 user elastic password changeme target_index_key @target_index index_name default_index type_name fluentd include_tag_key true tag_key DockerName flush_interval 1s request_timeout 15s reload_connections false reconnect_on_error true resurrect_after 5s buffer_type memory num_threads 2 </match> #如果进来的数据tag匹配docker.**,则将数据存储到elasticsearch中,存储到elasticsearch的index以进来的json格式日志中的@target_index的key值作为索引 #如果没有名称叫@target_index的key,则将数据存储到名称叫default_index的默认索引中 <match **> @type elasticsearch hosts 10.1.1.225:9200 user elastic password changeme logstash_format true logstash_prefix unknown logstash_dateformat %Y.%m.%d time_key_format %Y-%m-%dT%H:%M:%S.%N%z target_index_key @target_index index_name default_index type_name fluentd include_tag_key true tag_key DockerName flush_interval 1s request_timeout 15s reload_connections false reconnect_on_error true resurrect_after 5s buffer_type memory num_threads 2 </match> #如果之前的tag都没匹配到,则数据按照这个规则进行存储 EOF docker build --no-cache --pull -t fluentd/yujianbo:20180829 ./ docker rm -f pilipa-inside-fluentd docker run -d \ --name pilipa-inside-fluentd \ --env FLUENTD_CONF=fluent.conf \ -v /srv/fluentd/fluent.conf:/fluentd/etc/fluent.conf \ -p 8888:8888 \ -p 24224:24224 \ fluentd/yujianbo:20180829
3.修改docker的配置文件让容器启动后自动把日志转发到我们新建的fluentd服务器
cat /etc/docker/daemon.json { "dns": [ "114.114.114.114", "8.8.8.8" ], "data-root": "/srv/docker/", "hosts": [ "unix:///var/run/docker.sock" ], "registry-mirrors": [ "https://0sr73mco.mirror.aliyuncs.com" ], "log-driver": "fluentd", "log-opts": {"fluentd-address":"10.1.1.229:24224","tag":"docker.{{.Name}}"} } systemctl daemon-reload systemctl restart docker
4.新建一个nginx容器测试一下
cat /root/nginx.conf ... log_format json '{"times":"$time_local",' '"@target_index":"nginx",' '"remoteuser":"$remote_user",' '"remoteip":"$remote_addr",' '"bodysize":$body_bytes_sent,' '"requesttime":$request_time,' '"upstreamtime":$upstream_response_time,' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"request":"$request",' '"url":"$uri",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"http_user_agent":"$http_user_agent",' '"status":$status}'; access_log /var/log/nginx/access.log json; ... docker run -d --name nginx -p 80:80 -v /root/nginx.conf:/etc/nginx/nginx.conf nginx #访问一下curl http://127.0.0.1/就能在kibana上看到我们服务器新产生的日志了
参考资料:
阅读更多https://docs.fluentd.org/v1.0/articles/quickstart
https://docs.fluentd.org/v0.12/articles/install-by-docker
相关文章推荐
- 使用Docker搭建ELK日志搜集系统(三)
- 使用Docker搭建ELK日志系统
- 1-ELK安装及使用教程(搭建日志分析系统)
- 搭建ELK日志分析系统(四)-kibana安装和使用
- 搭建ELK日志分析系统(三)-Logstash安装和使用
- 使用 Kafka 和 ELK 搭建测试日志系统(1)
- 使用Docker构建ELK Docker集群日志收集系统
- 使用ELK(logstash,elasticsearch,kibana)+redis搭建nginx日志分析平台
- Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台
- 在Linux系统下使用Docker以及Weave搭建Nginx反向代理
- Centos6.5使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践
- ELK日志分析系统搭建配置
- elk日志系统的搭建
- ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 good
- ELK 日志监控平台环境搭建及使用说明
- 结合Docker快速搭建ELK日志收集分析平台
- ELK日志系统:Filebeat使用及Kibana如何设置登录认证(转)
- ELK+kafka日志系统搭建-实战
- 日志系统ELK使用详解(一)--如何使用
- ELK日志分析系统环境搭建