第一,对于企业来说,日志的重要性不言而喻,就不赘述了。
第二,日志收集分析展示平台的选择,这里给出几点选择ELK的理由。ELK是一套非常成熟的系统,她本身的构架非常适合Kubernetes集群,这里官网当中也是选用的 Elasticsearch作为Sample的,GitHub上下载的kubernetes二进制包中本身就有这个.yaml文件,所以使用ELK作为收集日志的理由相当充分。
----------
时间:2016年5月2日。
地点:南京某高校。
作者:duweike。
主机系统:Ubuntu14.04。
软件版本:
Docker1.10.3,Kubernetes1.2.1,Etcd2.3.0,Flannel0.5.5.
Logstash2.3镜像,Elasticsearch2.3镜像,Kibana4.5镜像,下载的均是官方镜像。
----------
上面的这一套构架相当完善,一目了然,由于我这里是一个测试环境,把中间的Redis和Logstash去掉了,节点上的Logstash把日志直接发向Elasticsearch。
我是这样结合Kubernetes设计的。
一、每个节点上的所有Pod的日志,通过数据卷全部存储在一个固定的目录里面,日志文件通过Pod命或者Pod里面的容器主机命命名,从而来区别不同的Pod的日志文件,同时也解决了日志持久化的问题。
二、每个Node上面部署一个Logstash-pod,监控Node上面指定好的目录里面的日志文件,如果日志文件有更新,则把更新日志发向Elasticsearch。
三、Elasticsearch+Kibana两个容器作为一个Pod,Elasticsearch接收各个Node上的Logstash发来的日志,Kibana用来展示日志信息。
示意图如下
一、制作镜像。
首先下载官方镜像,Logstash2.3镜像,Elasticsearch2.3镜像,Kibana4.5镜像。经过分析和尝试,这里Elasticsearch+Kibana是可以直接使用的,但是Logstash需要稍作修改才行。
先看一下官方的Logstash2.3的官方Dockerfile文件。
网址:https://github.com/docker-libr ... rfile
这个官方的Dockerfile修改如下:
ENV PATH /opt/logstash/bin:$PATH #删除该行下面的,
COPY logstash.conf / #然后添加该行
下面是logstash.conf
文件内容,可以进行详细的设置,这里只是个测试。
input {
file {
path => ["/var/lib/docker/logstash-logs/*.log"]
type => "logstash"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["elasticsearch-kibana.development:9200"]
#上面的地址指向Elasticsearch+Kinana的Pod, elasticsearch-kibana.development表示一个域名,通过Kubernetes DNS解析,development是Namespace。
}
}
然后把修改过的Dockerfile和logstash.conf
放在一个目录build
。
/elk/Dockerfile-logstash# ls
Dockerfile logstash.conf
/elk/Dockerfile-logstash# docker build -t logstash:dev .
二、部署。
这部分就相当简单了,直接贴.yaml
文件就行了,想要知道其中的细节为什么这样部署,建议阅读官方的Dockerfile文件。比如挂在路径为什么是:/usr/share/elasticsearch/data。
启动Elasticsearch+Kibana的Pod。
# kubectl create -f elasticsearch-kibana-svc.yaml
# kubectl create -f elasticsearch-kibana-rc.yaml
svc.yaml文件内容:
apiVersion: v1
kind: Service
metadata:
name: elasticsearch-kibana
labels:
name: elasticsearch-kibana
spec:
type: NodePort
selector:
name: elasticsearch-kibana
ports:
- name: elasticsearch-http
port: 9200
protocol: TCP
targetPort: 9200
- name: elasticsearch-transport
port: 9300
protocol: TCP
targetPort: 9300
- name: kibana
port: 5601
protocol: TCP
targetPort: 5601
nodePort: 30081
rc.yaml文件内容
apiVersion: v1
kind: ReplicationController
metadata:
name: elasticsearch-kibana
labels:
name: elasticsearch-kibana
spec:
replicas: 1
selector:
name: elasticsearch-kibana
template:
metadata:
labels:
name: elasticsearch-kibana
spec:
nodeSelector:
node: docker111
#这里是在指定的Node上面创建Pod的,
volumes:
- name: "elasticsearch-storage"
hostPath:
path: "/var/lib/docker/elk-data"
#上面的路径是自定义设定的,为Elasticsearch的数据库存放位置。
containers:
- name: elasticsearch
image: elasticsearch:2.3
volumeMounts:
- name: "elasticsearch-storage"
mountPath: "/usr/share/elasticsearch/data"
ports:
- containerPort: 9200
name: http
protocol: TCP
- containerPort: 9300
name: transport
protocol: TCP
- name: kibana
image: kibana:4.5
ports:
- containerPort: 5601
下面是部署Logstash的Pod。
根据设计,需要每个Node上面启动一个Pod,不需要RC和Service,这里官方给出一个术语来形容:Daemon Set。
网址:http://kubernetes.io/docs/admin/daemons/
启动Logstash pod
# kubectl create -f logstash-pod.yaml
pod.yaml内容为:
apiVersion: v1
kind: Pod
metadata:
name: logstash-dev
namespace: development
spec:
nodeSelector:
node: docker111
#在有该标签的Node上生成,如果没有该标签,就是所有Node上生成。
volumes:
- name: "logstash-django-log"
hostPath:
path: "/var/lib/docker/logstash-logs"
#该Node上的公共挂载路径,日志保存在这里,Logstash监控改路径。
containers:
- name: logstash-dev
image: logstash:dev
volumeMounts:
- name: "logstash-log"
mountPath: "/gikoo-logs/"
command: ["logstash","agent","-f","/logstash.conf"]
restartPolicy: Always
到此就部署结束了,可以在浏览器中访问UI界面查看了。
----------
1、Elasticsearch不允许root权限执行。
2、ELK三个镜像Run的容器都不是root权限,读取日志信息的时候用户用户组要做相应的权限修改。
3、Logstash占用内存比较大,也是为什么一个Node上面只启动一个Logstash pod的原因。
Original url: Access
Created at: 2019-04-26 18:55:00
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论