上面咱说完了 liki架构、实现原理及环境搭建过程
现在就结束了吗? No 那多显得那么出类拔萃呀 哈哈
咱再结合一个具体的案例:
使用loki对接下k8s下面的pod日志
let's go !
具体过程如下:
1、nacos为注册中心
2、user和order为2个springboot项目
3、将user和order使用k8s部署
4、访问user接口 ,user访问order 打印出日志
5、该日志通过loki显示出来
1-4过程 咱们之前的文章介绍过
朋友们如果自己想实际操练一遍的话可以先看下这篇文章 使用k8s把项目部署起来
部署的效果是
nacos界面
现在loki有了,k8s pod 日志也有了 下面咱看看loki和k8s如何关联起来 达到通过loki查询k8s的效果
这里只需要实现 promtail访问到k8s日志就可以了
promtail可以直接访问到k8s集群内部的日志
也可以将k8s集群内部的日志挂载到宿主机器上 然后再通过promtail访问宿主机上的日志
这里介绍4种实现方式
咱们分别实现下看看
备注:这篇文章先简单介绍下4种方式的思路,下篇文章咱们针对这4种方式实现相应的效果
方式1:将默认路径 var/logs/*log 修改成/var/log/container
promtail可以直接访问到k8s集群内部的日志
首先需要知道 k8s集群下面的pod生成的日志 默认目录为/var/log/containers
1、咱先看看上面的promtail的docker-compose的配置命令
promtail: image: grafana/promtail:1.5.0 volumes: - /var/log/container:/var/log/container command: -config.file=/etc/promtail/docker-config.yaml networks: - loki
其中 /etc/promtail/docker-config.yaml
是访问的docker内部的配置文件
咱进去docker内部看下
a、查看容器id
docker ps |grep promtail
b、进入容器
docker exec -it 71cb21c2d0a3 sh
看到了
job=varlogs
对应的日志文件路径是 /var/log/*log
是不是有似曾相识的感觉
job对应varlogs
filenames是对应的日志路径 /var/log/*log下面的日志文件
当然只是在promtail容器内部的
在这里只需要将/var/log/*log路径修改成 /var/log/container/*log 这个路径就可以了
那如何修改呢
我们知道 这个配置文件是在容器内部的
要想修改这个配置文件 需要在宿主机也弄一份 然后修改宿主机上的这份文件 然后替换掉docker种的这个配置即可
看到界面效果 发现问题了没?
1、路径不是修改成 /var/log/container/*log 这个了吗 怎么还是 /var/log下面的日志?
2、选中一个日志文件怎么显示不出来该文件的内容
这2个问题放到下篇文章解答下吧 (先埋个坑 哈哈 我这么这么坏)
方式2
- replacement: /var/log/container/*.log
这种方式也放到下篇文章再说吧
方式3:将k8s集群内部的日志挂载到宿主机器上 然后再通过promtail访问宿主机上的日志
这种方式 我试过了 也是达到期望效果的
1、
首先给springboot项目添加日志文件输出 咱们这个示例中 以user项目为例说下
- 增加日志文件
- 日志文件的输出目录是 /opt/logs
2、将springboot项目生成docker镜像 然后上传到阿里的镜像库 然后在k8s user 配置文件中引用这个镜像库
这些都在之前那篇文章中详细说过了 这里就不再附述了
这里只需要不同点
圈红的地方是添加的映射
volumeMounts 这个是将docker内部的/opt/logs目录作为挂载目录
volumes 这个是将宿主机中的
/Users/mengfanxiao/Documents/third_software/loki/log
目录作为映射目录 即docker中的/opt/logs下面的日志会映射到该目录下
需要注意:
我一开始用的目录是 /opt/logs 但是在我的mac环境中一直不能将docker中的日志目录
映射到宿主机上 但 centos就可以 这个原因也放到下篇文章说下吧
3、最后 只需要让promtail访
问/Users/mengfanxiao/Documents/third_software/loki/log 这个目录下面的日志就行了
至于怎么让promtail访问 下篇再说吧
方式4:promtail不是从/var/log目录下读取的日志嘛 那么我将user日志输出到/var/log 下面不就行了
可能遇到的问题
- 如果k8s状态是start fail状态 则service暴露NodePort的端口也访问不了的情况下 需要重新启动下k8s
启动方式 可以参考下我之前的那篇文章K8S原理简介及环境搭建