基于loki的日志聚合系统部署文档
一,背景&目的
目前HRO系统日志分散于各个服务中,查看不方便,且需要服务器权限。因此需要搭建一个统一的日志聚合系统
目前热门方案有基于elasticsearch的ELK方案。
ELK,即 Elasticsearch、Logstash 和 Kibana 简称,是最流行的开源日志聚合工具。它被 Netflix、Facebook、微软、LinkedIn 和思科使用。这三个组件都是由 Elastic 开发和维护的。 Elasticsearch 本质上是一个 NoSQL 数据库,以 Lucene 搜索引擎实现的。 Logstash 是一个日志管道系统,可以接收数据,转换数据,并将其加载到像 Elasticsearch 这样的应用中。 Kibana 是 Elasticsearch 之上的可视化层。
ELK 存在的问题
现有的很多日志采集的方案都是采用全文检索对日志进行索引(如 ELK 方案),优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,操作苦难。
很多功能往往用不上,大多数查询只关注一定时间范围和一些简单的参数(如 host、service 等),使用这些解决方案就有点杀鸡用牛刀的感觉了。
2.Loki
是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs.,类似于 Prometheus 的日志系统。
与其他日志聚合系统相比,Loki具有下面的一些特性:
Loki 日志系统由以下3个部分组成:
二、系统结构功能描述
架构图
三、安装部署
1、安装docker
1.1、查看linux发行版,内核
1.2、替换阿里云yum源
3、安装docker
4、启动docker
2、安装docker-compose
pip在centos也没有,如下处理
1.查看是否安装依赖包,没安装先安装:
sudo yum install epel-release
2.更新文件库
sudo yum -y update
3.安装pip
sudo yum -y install python-pip
sudo pip install -U docker-compose
查看docker compose的版本
docker-compose version
3,安装loki和grafana
创建/usr/local/docker/loki目录
创建docker-compose.yml 文件
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- /data/loki:/loki
networks:
- loki
grafana:
image: grafana/grafana:master
ports:
- "3000:3000"
networks:
- loki
查看docker-compose version
执行命令安装启动 docker-compose up -d
查看容器是否启动
docker ps
如图loki 和grafana已启动
4,安装promtail
创建软件文件夹
1)下载promtail 日志采集端
下载地址:https://github.com/grafana/loki/releases/
选择promtail-linux-amd64.zip,复制链接地址wget即可:
2)解压
3)配置文件
同级目录创建配置文件promtail-local-config.yaml
clients:loki地址
__path__: 需采集的日志文件目录
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://10.23.14.1:3100/loki/api/v1/push
scrape_configs:
- job_name: cbas-service
static_configs:
- targets:
- localhost
labels:
service: cbas-service
env: dev
__path__: /data/logs/cbas-service/*.log
- job_name: social-service
static_configs:
- targets:
- localhost
labels:
service: social-service
env: dev
__path__: /data/logs/social-service/*.log
启动脚本
echo "stop promtail"
#开始循环5次,判断目标进程是否存在,如果存在安全退出 kill -15等待3秒 否则终止循环
for((i=1;i<=5;i++));
do
pid=`ps -ef | grep promtail | grep config | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo “旧应用进程id:$pid”
kill -15 $pid
sleep 3
else
echo "安全退出"
break
fi
done
#判断循环是否安全退出,如果退出失败。强制退出kill -9
pid=`ps -ef | grep promtail | grep config | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "安全退出失败强制退出kill-9"
kill -9 $pid
fi
nohup ./promtail-linux-amd64 --config.file=promtail-local-config.yaml >pro.log &
运行结果在pro.log