搭建日志聚合grafana&loki 收集Nginx日志

helm操作

// 查看helm版本
helm version 
// 添加repo
helm repo add grafana https://grafana.github.io/helm-charts
// 更新
helm repo update
// 拉取配置 
helm fetch grafana/loki-stack
// 解压.tgz 文件到当前目录
tar zxvf loki-stack-2.3.1.tgz -c ./

参考资料:

修改配置

  1. 解压完文件会有一个 loki-stack 文件夹,进入文件夹
  2. 进入charts文件夹,首先修改grafana,进入grafana文件夹后,vim values.yaml ,快速定位 ingress,: /ingress,将ingress修改
  3. 接下来修改promtail,同样 vim values.yaml。首先修改volumes: 和 volumeMounts: 如果你docker 和 k8s 日志存储是默认的就不需要修改,
    如果更换过路径,将这两个地方一起修改。它会将主机日志目录通过volumes方式挂载到promtail容器内
  4. 接下來修改Loki,增加 storageClassName 即可 并将 persistence 开启,也可以通过helm 命令进行安装。回到loki-stack目录,如下:
helm upgrade --install loki --namespace=logs ./loki-stack  --set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false,loki.persistence.enabled=true,loki.persistence.storageClassName=nfs-storage-151,loki.persistence.size=5Gi

这里要注意 storageClassName 这里要提前准备好 参考文章 StorageClass+NFS

还有… 一开始我也不知道怎么修改相关配置,我发现目录下的 templates 文件夹,里面的yaml文件 应该是对应values.yaml 里面的 key和value关系

观察pod

观察pod是否有异常,如果遇到问题就解决问题

进入grafana

通过之前的 grafana ingress 进入 ,不知道为什么 一开始我的ingress 一直进不去
emm…也是挺奇怪的
后来查阅了些资料 通过登录页就可以打开 http://这里是ingress地址/login

修改密码

查了grafana的配置values文件,愣是没看懂哪里配置的密码和账号,大不了直接修改了,不管它了… 因为这里是k8s部署,还是要先进入容器内进行相关操作,如何操作 网上搜一搜应该都有的
参考文章:修改grafana登录密码

初步完成

grafana

继续挖掘

emm … 继续看相关内容 这里只是通过helm搭建了测试的grafana+loki+prometheus
相关理论知识还要继续完善


Panel plugin not found: table-old

遇到的问题
导入了相关的模板之后,有些模板有这样的告警,我觉得应该是grafana 插件缺少这个样式 后来进入容器去安装插件,发现还是没有相关组件,我猜测是grafana 6.X和7.X 这几个版本 这个组件样式库可能没有了,我编辑了样式用table可以正常显示。可以将模板下载到本地的json文件 , 将table-old 全部替换成table


ps:这几天发现grafana也需要数据固化,中间有异常容器重启之后 还是数据重置了,所以还是需要配置上。

Nginx 日志

k8s集群的日志已经收集弄好,现在是要收集集群外的数据。
从grafana 官方 面板找到nginx比较受欢迎的面板 这里推荐 nginx面板 看这个面板的要求 是要grafana 7.4.0 这里我是修改了配置直接升级grafana 镜像的版本,其它暂时没有发现什么问题

// 查看 promtail 镜像
docker search promtail

// 拉取和之前版本一样的promtail镜像
docker pull grafana/promtail:2.1.0

promtail 相关配置

需要了解

编写docker-compose

version: "3"

services:
  promtail:
    image: grafana/promtail:2.1.0
    restart: always
    volumes:
      - /usr/local/nginx/logs/:/var/log/
      - /home/promtail/:/home/promtail/
    command: -config.file=/home/promtail/promtail-config.yaml
    extra_hosts:
      - "loki.test.wyyy.com:xxx" //  这里隐藏了ip  更换成自己的ingress 和ip

编写Promtail配置文件

server:
  http_listen_port: 0
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki.test.wyyy.com/loki/api/v1/push

scrape_configs:
    - job_name: system
      pipeline_stages:
      - replace:
          expression: '(?:[0-9]{1,3}\.){3}([0-9]{1,3})'
          replace: '***'
      static_configs:
      - targets:
         - localhost
        labels:
         job: nginx_access_log
         host: nginx-232
         agent: promtail
         __path__: /var/log/gatewaynew.access.log  // 这里也可以使用模糊匹配

遇到的问题,一开始我是直接模糊匹配文件路径下的.log文件

查看容器日志后 有下面告警

level=warn ts=2021-03-11T02:40:41.616840845Z caller=client.go:288 component=client host=loki.test.wyyy.com msg="error sending batch,
 will retry" status=429 error="server returned HTTP status 429 Too Many Requests (429):
 Ingestion rate limit exceeded (limit: 4194304 bytes/sec) while attempting to ingest '1817' lines totaling '1048266' bytes,
 reduce log volume or contact your Loki administrator to see if the limit can be increased"

loki限制 看了这个博客,但是我还是不知道怎么修改 因为我是用helm安装的
我查看了Loki 的配置文件 有如下:

chunk_block_size: 262144                                                                                                                   
chunk_idle_period: 3m                                                                                                                      
chunk_retain_period: 1m 

其实还是不知道怎么修改,到时候还是花点时间再研究一下

Nginx面板
emm… 这里nginx面板的地理位置插件还没有弄,需要安装下地理位置模块先到这里吧


emm… 今天继续 今天补充下Nginx 地理位置

nginx 地理位置模块

nginx官网关于地理位置有两个模块,这里推荐geoip2模块 Github-geoip2,因为geoip 有好几年不维护了,好吧,抓紧入坑…

新建文件

首先,先在nginx服务器上 新建个目录 关于 geoip2,我这里直接在nginx文件目录里新建了module文件夹,继续新建geoip2存储相关文件,如下:

/usr/local/nginx/module/geoip2

下载

从github上的地址去 下载相关zip包,存储到上面新建的文件夹内
ngx_http_geoip2_module-3.3版本

已有nginx模块,添加模块

查看nginx已有模块

[root@nginx2 nginx]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module 

到nginx源码目录

[root@nginx2 local]# cd /usr/local/src/nginx-1.18.0/
[root@nginx2 nginx-1.18.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@nginx2 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-dynamic-module=/usr/local/nginx/module/geoip2

错误

解决方案:yum install libmaxminddb-devel
然后重新运行一下,执行如下命令:

  • make
  • make install
    回到之前安装的nginx目录,查看nginx相关信息
/usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx/ --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --add-dynamic-module=/usr/local/nginx/module/geoip2

修改Nginx配置

vim  /usr/local/nginx/conf/nginx.conf

1.然后在文件里面添加
load_module modules/ngx_http_geoip2_module.so;
2.添加如下代码
http {
    ...
    geoip2 /etc/maxmind-country.mmdb {
        auto_reload 5m;
        $geoip2_metadata_country_build metadata build_epoch;
        $geoip2_data_country_code default=US source=$variable_with_ip country iso_code;
        $geoip2_data_country_name country names en;
    }

    geoip2 /etc/maxmind-city.mmdb {
        $geoip2_data_city_name default=London city names en;
    }
    ....

    fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param CITY_NAME    $geoip2_data_city_name;
    ....
}

遇到报错:

nginx: [emerg] unknown "variable_with_ip" variable

解决方案:issues

geoip2 /usr/local/nginx/module/GeoLite2-Country.mmdb {
        auto_reload 5m;
        $geoip2_metadata_country_build metadata build_epoch;
        $geoip2_data_country_code default=CN source=$remote_addr country iso_code;
        $geoip2_data_country_name country names zh-CN;
    }

    geoip2 /usr/local/nginx/module/GeoLite2-City.mmdb {
        $geoip2_data_city_name default=Wenzhou city names zh-CN;
    }

    fastcgi_param COUNTRY_CODE $geoip2_data_country_code;
    fastcgi_param COUNTRY_NAME $geoip2_data_country_name;
    fastcgi_param CITY_NAME    $geoip2_data_city_name;

GeoLite2-Country.mmdb 和 GeoLite2-City.mmdb两个文件需要去官方 注册 下载,这里自行解决…因为也是同事发给我的 继续往下走

 # 检查 配置文件是否正确
/usr/local/nginx/sbin/nginx -t
正确的话 可以重读配置
/usr/local/nginx/sbin/nginx -s reload 

测试ip信息
mmdblookup --file /usr/local/nginx/module/GeoLite2-City.mmdb --ip 8.8.8.8

可以去看下nginx日志是否已经修改格式,
注意 ,我这边用的是grafana Nginx面板
Nginx 日志的数据已经修改了…

但是去grafana观察的时候发现promtail 容器里面出现了问题 如下:

问题
issues 这里有人和我遇到了一样的问题,但是没有得到解决…这个我还需要再研究一下… 先到这里吧


最后的问题解决

关于上次Nginx promtail 出错的问题,我后来重启了docker服务得到了解决,

grafana-worldmap-panel 问题

# 进入容器 安装插件
cd /var/lib/grafana/plugins

grafana-cli plugins install grafana-worldmap-panel
# 成功 重启pod

地图面板不显示的问题

最终结果

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值