背景

传统项目里面记录日志大多数都是将日志记录到日志文件,升级到分布式架构以后,日志开始由文件转移到elasticsearch(es)中来存储,达到集中管理。在kubernetes平台里面把日志记录到es有两种简单的方案:

  • 容器外记录。

  • 容器内记录。

回到我们的标题的问题。有没有一种方案能够不依赖日志组件,就单纯的把日志输出到控制台就能记录日志呢?在应用层面不依赖各种组件,在宿主机上面也不用大量额外的配置就能统一的收集日志呢?答案是有的。

log-pilot

介绍我们今天的主角:log-pilot

下面我们一步一步将log-pilot部署出来。

演示
安装es
kubectl apply -f https://acs-logging.oss-cn-hangzhou.aliyuncs.com/elasticsearch.yml
部署log-polot
kubectl apply -f https://acs-logging.oss-cn-hangzhou.aliyuncs.com/log-pilot.yml
为了方便展示我们再部署一个kibana
kubectl apply -f https://acs-logging.oss-cn-hangzhou.aliyuncs.com/kibana.yml

a) 要让kibana能够外网展示所以还需要配置一个ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   name: kibana-ingress
   namespace: kube-system
spec:
   rules:
   - http:
       paths:
       - path: /
         backend:
           serviceName: kibana
           servicePort: 80                        

b) 创建成功以后获取访问地址

kubectl get ingress -n=kube-system
准备一个应用程序通过logger打印日志,并部署到kubernetes
修改这个应用程序的kubernetes编排文件
apiVersion: v1
kind: Pod
metadata:
  name: testapi
  namespace: default
  labels:
    name: testapi
spec:
  containers:
    env:
     - name: aliyun_logs_catalina
       value: "stdout"                                
     - name: aliyun_logs_catalina
       value: "stdout"     
访问kibana,查询日志

a) 先查看容器内记录的日志,为正式环境的一部分截图
如何更优雅的在kubernetes平台下记录日志-LMLPHP

b) kibana查询日志
如何更优雅的在kubernetes平台下记录日志-LMLPHP

结语

通过这种方案,能让我们快速的把整个kubernetes集群内的应用程序日志接入到es,迁移和维护成本非常低,极大提升运维效率。

后记

笔者目前在武汉工作,不知道是否有.net相关的线下组织,主要想推动一下.net在武汉地区的发展,有这方面经验的朋友可以给我发下私信,非常感谢。

12-23 23:12