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 ./
参考资料:
修改配置
- 解压完文件会有一个 loki-stack 文件夹,进入文件夹
- 进入charts文件夹,首先修改grafana,进入grafana文件夹后,
vim values.yaml
,快速定位 ingress,: /ingress
,将ingress修改 - 接下来修改promtail,同样
vim values.yaml
。首先修改volumes: 和 volumeMounts:
如果你docker 和 k8s 日志存储是默认的就不需要修改,
如果更换过路径,将这两个地方一起修改。它会将主机日志目录通过volumes方式挂载到promtail容器内 - 接下來修改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登录密码
初步完成
继续挖掘
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
其实还是不知道怎么修改,到时候还是花点时间再研究一下
emm… 这里nginx面板的地理位置插件还没有弄,需要安装下地理位置模块先到这里吧
emm… 今天继续 今天补充下Nginx 地理位置
nginx 地理位置模块
nginx官网关于地理位置有两个模块,这里推荐geoip2模块 Github-geoip2,因为geoip 有好几年不维护了,好吧,抓紧入坑…
新建文件
首先,先在nginx服务器上 新建个目录 关于 geoip2,我这里直接在nginx文件目录里新建了module文件夹,继续新建geoip2存储相关文件,如下:
/usr/local/nginx/module/geoip2
下载
从github上的地址去 下载相关zip包,存储到上面新建的文件夹内
已有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
最终结果