目录
- 日志来源
- elk介绍
- elasticsearch介绍
- logstash介绍
- kibana介绍
- 部署
- elasticsearch
- 拉取镜像:`docker pull elasticsearch:7.17.9`
- 修改配置⽂件:`/usr/share/elasticsearch/config/elasticsearch.yml`
- 启动容器
- 设置密码(123456)
- 忘记密码重置密码
- logstash
- 拉取镜像:`docker pull logstash:7.17.9`
- 修改配置
- 启动容器
- kibana
- 拉取镜像
- 修改配置⽂件kibana.yml
- 启动容器
- 运行
日志来源
- 使用docker部署nginx,并且提供简单的静态页面服务。
- 将nginx的配置,日志(error.log,access.log),页面统统挂载出来。
启动步骤如下:
-
先启动一个野nginx,然后把上述文件或目录docker cp出来,否则直接启动nginx会造成空目录覆盖镜像里面的文件导致无法启动nginx:
docker run -d --name nginx_test docker exec -it nginx_test bash
-
确定文件,进入容器后,根据配置文件定位自己需要的目录:
# 配置目录(我嫌麻烦,一锅端) docker cp nginx_test:/etc/nginx /generalzy/elk/config # 页面目录 docker cp nginx_test:/usr/share/nginx/html /generalzy/elk/html # 日志目录 docker cp nginx_test:/var/log/nginx /genralzy/elk/logs
-
修拍配置文件后启动:
docker run -p 30080:80 --name nginx --privileged=true \ -v /generalzy/elk/html:/usr/share/nginx/html \ -v /generalzy/elk/logs/access.log:/var/log/nginx/access.log \ -v /generalzy/elk/logs/error.log:/var/log/nginx/error.log \ -v /generalzy/elk/config:/etc/nginx \ -d nginx
-
访问nginx
elk介绍
⼀个⽇志系统应该包含以下⼏点:
(1) 收集[collect]:能够采集多种来源的⽇志数据
(2) 传输[transform]:能够稳定的把⽇志数据解析过滤并传输到存储系统
(3) 存储[store]:存储⽇志数据
(4) 分析[analyze]:⽀持 UI 分析
(5) 警告[warning]:能够提供错误报告,监控机制
elasticsearch介绍
elasticsearch是⼀个分布式、⾼扩展、⾼实时的搜索与数据分析引擎,作为存储系统是整个ELK架构的 核⼼。⽤于全⽂检索、结构化搜索、分析。
logstash介绍
logstash是开源的数据收集引擎。可以收集不同来源的数据,并将数据解析过滤发送到输出⽬标。
logstash提供了⼤量插件,可解析,丰富,转换和缓冲任何类型的数据。
管道(pipeline) 是logstash中独⽴运⾏的单元。每个管道都必须要包含输⼊(input)、输出(output)以及可选的过滤器(fileter)
1:inputs 输⼊ 【输⼊来源可以是file、kafka、beats等】
2:filters 过滤
3:outputs 输出 【输出⽬标可以是Stdout(控制台)、File、ES等】
logstash可以从多个输⼊源获取内容通过type进⾏区分 并可根据type向多数据源输出
kibana介绍
Kibana是⼀个开源的分析与可视化平台。
⽤kibana搜索、查看存放在Elasticsearch中的数据。
Kibana与Elasticsearch的交互⽅式是各种不同的图表、表格、地图等,直观的展示数据,从⽽达到⾼级 的数据分析与可视化的⽬的。
部署
部署前先创建新的局域⽹,防⽌容器IP频繁改动后需要修改配置⽂件
docker network create --subnet=172.18.0.0/16 elk_net
或
docker network create elk_net
elasticsearch
拉取镜像:docker pull elasticsearch:7.17.9
修改配置⽂件:/usr/share/elasticsearch/config/elasticsearch.yml
# es集群名称
cluster.name: "elastic"
# 监听
network.host: 0.0.0.0
# 跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
# 开启密码校验
xpack.security.enabled: true
启动容器
docker run -it --privileged=true -d -p 39200:9200 -p 39300:9300 --name es \
--net elk_net --privileged=true \
-v /generalzy/elk/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /generalzy/elk/es/data:/usr/share/elasticsearch/data \
-v /generalzy/elk/es/logs:/usr/share/elasticsearch/logs \
-e ES_JAVA_OPTS="-Xms128m -Xmx128m" -e "discovery.type=single-node" elasticsearch:7.17.9
Xms Xmx为最⼩最⼤堆内存,将其改为我们主机的物理内存的⼀半(50%-70%)即可,要设置成相同的值,以防⽌在运⾏时调整堆的⼤⼩。
设置密码(123456)
进⼊elasticsearch容器中初始化各个组件的密码
./bin/elasticsearch-setup-passwords interactive
忘记密码重置密码
修改elasticsearch.yml配置⽂件注释使⽤xpack安全校验配置,取消使⽤密码校验
重启容器查看所有索引curl -XGET "127.0.0.1:9200/_cat/indices" -H 'Content-Type: application/json'
删除security-7索引:curl -XDELETE 127.0.0.1:9200/.security-7
修改配置⽂件开启密码配置 后 重启,重复添加密码操作。
logstash
拉取镜像:docker pull logstash:7.17.9
修改配置
logstash.yml:
# 节点名称
node.name: "logstash001"
http.host: "0.0.0.0"
# 设置禁⽤X-Pack监视功能
xpack.monitoring.enabled: false
X-Pack是Elastic Stack的⼀个扩展插件,包含了安全控制、报警、监控、报表和画图功能。X- Pack能够⽅便地启⽤或禁⽤。
pipelines.yml:⽤于指定在⼀个logstash中运⾏多个管道的配置⽂件,在启动logstash时他会⾃动加载pipelines.yml中指定的path.config下的所有的管道配置⽂件conf合并成⼀个整体的配置⽂件。
将管道的具体的配置⽂件放置在config下,⽅便容器统⼀的挂载
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
# 可以在这个配置⽂件中定义多个管道,⽤于从多个数据源中获取信息
- pipeline.id: pipeline001 # 管道id
path.config: "/usr/share/logstash/config/*.conf"
pipeline管道配置: /usr/share/logstash/config/pipeline001.conf
#获取/usr/share/logs/*下的⽂件输出到es中
input {
file{
path => ['/usr/share/logs/*']
type => "nginx-log"
}
}
filter {
#json{
# 将message作为解析json的字段
#source => "message"
#}
}
output {
if[type] == "nginx-log"{
elasticsearch {
hosts => [ "es:9200" ]
index => "nginx-log-%{+YYYY-MM-dd}"
user => "elastic"
password => "123456"
}
}
}
nginx不做格式化 在logstash中是⽆法格式化成功的。它可以把json字符串处理成json数据(别忘了结尾分号)
'{"nginx_timestamp":"$time_iso8601","clientip":"$remote_addr", '
' "nginx_host":"$server_addr","host":"$http_host","request":"$request","url":"$request_uri",'
' "upstreamhost":"$upstream_addr","status":"$status","body_bytes_sent":"$body_bytes_sent",'
' "upstream_response_time":"$upstream_response_time",'
' "xff":"$http_x_forwarded_for","referer":"$http_referer","http_user_agent":"$http_user_agent",'
' "request_length":"$request_length","request_method":"$request_method"}'
启动容器
docker run -d -it --privileged=true --name=lh --net elk_net \
-p 35047:5047 -p 39600:9600 \
-v /generalzy/elk/logstash:/usr/share/logstash/config \
# nginx日志
-v /generalzy/elk/logs/:/usr/share/logs/ \
logstash:7.17.9
kibana
拉取镜像
docker pull kibana:7.17.9
修改配置⽂件kibana.yml
server.name: kibana
server.host: "0.0.0.0"
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.hosts: [ "http://es:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
elasticsearch.requestTimeout: 50000
i18n.locale: "zh-CN" #中⽂ui界⾯
server.publicBaseUrl: "http://0.0.0.0:5601"
启动容器
docker run -d --privileged=true --name kb \
-p 35601:5601 --net elk_net \
-v /generalzy/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
kibana:7.17.9
运行
打开界⾯后 先在索引管理中找到logstash输出到es中的数据产⽣的索引,随后去“索引模式”模块中去定义⼀个索引模式,kibana索引模式要与es中的索引相匹配才可以在kibana中实现可视化管理。
-
先根据索引写一个正则,由于收集的日志前缀都是nginx,可以定义
nginx
索引模式 -
查看日志: