word文档地址:https://github.com/IceEmblem/Learningdocuments/tree/master/%E5%AD%A6%E4%B9%A0%E8%B5%84%E6%96%99/%E5%B9%B3%E5%8F%B0%E6%97%A0%E5%85%B3/Kong%20%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0
准备工作 1.开始之前,我们需要删除之前安装容器kong(不会就去翻docker教程)
2.创建日志目录,我们创建一个目录存放日志
# mkdir -p /var/kong/logs && chmod 777 /var/kong/logs
3.执行如下命令生成本篇教程的docker
# sudo docker run -d --name kong --network kongnet --restart=always -e "KONG_DATAbase=postgres" -e "KONG_PG_HOST=postgres" -e "KONG_PG_USER=kong" -e "KONG_PG_PORT=5432" -e "KONG_PG_PASSWORD=kong123" -e "KONG_PG_DATAbase=kong" -e "KONG_PREFIX=/usr/local/kong/" -e "KONG_PROXY_ACCESS_LOG=logs/kong_client_access.log" -e "KONG_ADMIN_ACCESS_LOG=logs/kong_admin_access.log" -e "KONG_PROXY_ERROR_LOG=logs/kong_error.log" -e "KONG_ADMIN_ERROR_LOG=logs/kong_error.log" -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" -e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444" -v /var/kong/logs:/usr/local/kong/logs -p 80:8000 -p 443:8443 -p 8001:8001 -p 8444:8444 kong:2.0
参数说明:上篇文章已做说明,这里不讲了
日志相关的配置 prefix:工作目录,包含临时文件和日志
log_level:日志等级,取值为debug、info、notice、warn、error等
proxy_access_log:代理请求的日志路径,设为 off 可以关闭
proxy_error_log:代理错误的日志路径
admin_access_log:Admin Api请求访问日志路径,设为 off 可以关闭
admin_error_log:Admin Api请求错误日志路径
Kong的日志被我们映射到了/var/kong/logs目录
# ls /var/kong/logs
日志格式
如下是默认的日志格式
172.18.0.1 - - [04/Jan/2022:13:26:42 +0000] "GET /netkongtest/WeatherForecast HTTP/1.1" 200 513 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"172.18.0.1 - - [04/Jan/2022:13:26:44 +0000] "GET /netkongtest/WeatherForecast HTTP/1.1" 200 507 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"172.18.0.1 - - [04/Jan/2022:13:26:45 +0000] "GET /netkongtest/WeatherForecast HTTP/1.1" 200 510 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:95.0) Gecko/20100101 Firefox/95.0"
说明:
172.18.0.1:访问者ip
[04/Jan/2022:13:26:42 +0000]:访问时间
“GET /netkongtest/WeatherForecast HTTP/1.1”:访问的Api
“Mozilla/5.0 …”:浏览器信息
分布式系统的日志主要的问题是如何将各个系统的日志收集到一个地方,好进行查看和分析,下面介绍几个服务用于收集、处理、和检索日志
Filebeat Filebeat是一个日志采集器,其收集日志并将其发送到Elasticsearch或Logstash中。
如下,我们搭建Filebeat
1.拉取镜像
# docker pull elastic/filebeat:7.5.0
2.编写filebeat的配置文件
如下,我们在/opt/filebeat/config/目录下创建filebeat.yml文件,其内容如下:
# ------------------------------ input -------------------------------filebeat.inputs:#input类型,默认是log- type: log #是否启用该type enabled: true #input文件的位置,可以有多个 paths: - /var/kong/logs/kong_client_access.log - /var/kong/logs/kong_error.log# ------------------------------ Logstash Output -------------------------------#output到logstashoutput.logstash: #logstash服务器地址,可以有多个,以逗号","隔开 hosts: ["logstash:5044"]
其中logstash:5044是logstash服务器的地址,稍后我们将创建该服务器(docker容器)
3.执行如下命令生成docker容器
# docker run -d --name filebeat --network kongnet --restart=always -v /opt/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /var/kong/logs:/var/kong/logs elastic/filebeat:7.5.0
说明:
/usr/share/filebeat/filebeat.yml:filebeat默认配置文件
/var/kong/logs:将本地的/var/kong/logs映射到容器的/var/kong/logs
logstash是一个日志处理器,这里我们接收来自filebeat的日志,处理后发送至Elasticsearch(实际上这里的示例我们并不做任何处理)
1.拉起容器
#docker pull logstash:7.5.0
2.创建/opt/logstash/logstash.conf配置文件,其内容如下
input { # 接收来自 filebeat 的数据,暴露的端口为 5044 beats { port => 5044 }}output { # 将处理的数据发送至 elasticsearch elasticsearch { hosts => ["elasticsearch:9200"] index => "filebeat-logstash-cloud-kong-access" }}
其中elasticsearch:9200是elasticsearch服务器的地址,稍后我们将创建该容器
3.运行容器
# docker run -d --name logstash --network kongnet --restart=always -p 5044:5044 -v /opt/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash:7.5.0
Elasticsearch elasticsearch是一个文本检索引擎,我们这里用于检索我们的日志
1.拉起容器
# docker pull elasticsearch:7.5.0
2.创建elasticsearch数据存储目录
# mkdir -p /opt/elasticsearch/data && chmod 777 /opt/elasticsearch/data
3.创建配置文件 /opt/elasticsearch/config/elasticsearch.yml,其内容如下:
network.bind_host: 0.0.0.0http.cors.enabled: truehttp.cors.allow-origin: "*"
4.运行容器
# docker run -d --name elasticsearch --network kongnet --restart=always -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 -v /opt/elasticsearch/data:/usr/share/elasticsearch/data -v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.5.0
至此我们分布式日志处理完成,可以通过elasticsearch的api检索日志
Kibana kibana是针对elasticsearch的可视化站点,下面我们安装kibana,使用kibana检索收集过来的日志
1.拉取容器
# docker pull kibana:7.5.0
2.创建配置文件/opt/kibana/config/kibana.yml,其内容如下:
server.name: kibanaserver.host: "0.0.0.0"elasticsearch.hosts: ["http://elasticsearch:9200"]
3.运行容器
# docker run -d --name kibana --network kongnet --restart=always -p 5601:5601 -v /opt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.5.0
4.测试检索功能
1)访问127.0.0.1:5061端口,登录kibana
2)创建一个index pattern
回到首页,我们可以添加过滤器,检索我们的日志了