基于loki的日志聚合系统部署文档

基于loki的日志聚合系统部署文档

一,背景&目的

目前HRO系统日志分散于各个服务中,查看不方便,且需要服务器权限。因此需要搭建一个统一的日志聚合系统

目前热门方案有基于elasticsearch的ELK方案。

  1. Elastic Stack(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​中存储的是压缩后的非结构化日志,并且只对元数据建立索引,因此​Loki​ 具有操作简单、低成本的优势。
  • 使用与 Prometheus 相同的标签。​Loki​通过标签对日志进行索引和分组,这使得日志的扩展和操作效率更高。
  • 特别适合储存 Kubernetes Pod 日志。诸如 Pod 标签之类的元数据会被自动删除和编入索引。
  • Grafana 原生支持。
  •  

​Loki​ 日志系统由以下3个部分组成:

  • loki是主服务器,负责存储日志和处理查询。
  • promtail是专为loki定制的代理,负责收集日志并将其发送给 loki
  • Grafana用于 UI展示。

 

二、系统结构功能描述

架构图

基于loki的日志聚合系统部署文档_第1张图片

 

三、安装部署

1、安装docker

1.1、查看linux发行版,内核

  1. [root@docker~]# cat /etc/redhat-release  #查看版本号
  2.  
  3. CentOS Linux release 7.1.1503 (Core)
  4.  
  5. [root@docker ~]# uname -r  #查看Linux内核
  6.  
  7. c3.10.0-229.el7.x86_64

1.2、替换阿里云yum源

  1. 1 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #下载阿里yum源2 
  2.  
  3. 2 yum makecache  #生成仓库缓存 

3、安装docker

  1. yum install docker -y

4、启动docker

  1. systemctl start docker  #启动docker
  2. systemctl enable docker #开机启动docker
  3. systemctl status docker #查看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

 

你可能感兴趣的:(原创,loki,docker)