kibana 部署
kibana 是一个可视化界面,方便管理es
#逐级创建目录
mkdir /data/es/kibana/config
mkdir /data/es/kibana/plugins
#给目录授权
cd /data/es
chmod 777 kibana
cd /data/es/kibana/config
#制作配置文件
vim kibana.yml
复制代码
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://10.90.x.x:9200","http://10.90.x.x:9200","http://10.90.x.x:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"
# 启用安全认证后,需要添加如下配置
elasticsearch.username: "kibana"
elasticsearch.password: "之前为kibana帐户创建的密码"
复制代码
docker pull kibana:7.5.0
启动服务:
docker run -d --name kibana -p 5601:5601 -v /data/es/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -v /data/es/kibana/plugins:/usr/share/kibana/plugins:rw --name kibana kibana:7.5.0
这样kibana就启动成功了,界面的具体使用就不介绍了,自己多摸索一下,下面补充一下常用的内容
命令行工具使用
# 节点如果有未分片的,可以通过这个命令找到,一般是网络问题导致分片失败并一直无法恢复。关闭分片再开启可以解决问题
GET /_cluster/allocation/explain
# 解决索引某个shard无法恢复的问题
POST /_cluster/reroute?retry_failed=true
复制代码
创建索引生命周期策略
直接通过页面填写表单即可,一般会创建删除策略,在模板配置的时候和策略关联上
索引模板使用
创建索引模板k8s-template,设置索引匹配模式
索引设置
{
"index": {
"lifecycle": {
"name": "k8s-logs-delete-policy" // 关联生命周期策略
},
"refresh_interval": "30s",
"number_of_shards": "1",
"number_of_replicas": "1"
}
}
复制代码
映射设置
{
"dynamic_templates": [
{
"message_field": {
"path_match": "message",
"mapping": {
"norms": false,
"type": "text"
},
"match_mapping_type": "string"
}
},
{
"string_fields": {
"mapping": {
"norms": false,
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
},
"match_mapping_type": "string",
"match": "*"
}
}
],
"properties": {
"@timestamp": {
"type": "date"
},
"geoip": {
"dynamic": true,
"properties": {
"ip": {
"type": "ip"
},
"latitude": {
"type": "half_float"
},
"location": {
"type": "geo_point"
},
"longitude": {
"type": "half_float"
}
}
},
"@version": {
"type": "keyword"
}
}
}
复制代码
如果需要使用生命周期,滚动策略要创建别名
logstash 部署
logstash用来接收日志数据,处理后推送到es中,下面来部署logstash
docker pull logstash:7.5.0
启动命令:
docker run -d -p 5044:5044 -p 9600:9600 -it -v /data/logstash/config/:/usr/share/logstash/config/ --name logstash logstash:7.5.0
创建目录:mkdir -p /data/logstash/config
创建文件,共创建4个文件,分别是logstash.yml,log4j2.properties,pipelines.yml,es.conf,之后启动服务
logstash 最核心的能力还是对采集到的日志做过滤。大致是这样一个效果,比如一条日志经过filter,被格式化成json数据,通过grok过滤器处理数据,配置如下
es.conf
input {
beats {
port => 5044
codec => plain{
charset=>"UTF-8"
}
}
}
filter {
grok {
match => [
"message", "\s{0,5}%{TIMESTAMP_ISO8601:logTime}.{0,10}\|.*\|%{LOGLEVEL:logLevel}\|\s{0,3}%{GREEDYDATA:logMessage}",
"message", "\s{0,3}%{TIMESTAMP_ISO8601:logTime}.\s{0,10}%{LOGLEVEL:logLevel}\s{0,10}%{GREEDYDATA:logMessage}"
]
#用上面提取的message覆盖原message字段,正则表达式根据自己业务日志格式做相应调整
#overwrite => ["message"]
}
}
output {
elasticsearch {
action => "index"
hosts => ["10.90.x.x:9200","10.90.x.x:9200","10.90.x.x:9200"]
index => "k8s-%{index}-%{+YYYY.MM.dd}" #使用log-pilot给的索引名+年月日
codec => plain {
format => "%{message}"
charset => "UTF-8"
}
user => "elastic"
password => "填入设置的密码"
}
}
复制代码
log4j2.properties
logger.elasticsearchoutput.name = logstash.outputs.elasticsearch
logger.elasticsearchoutput.level = debug
复制代码
logstash.yml
http.host: "0.0.0.0"
http.port: 9600
xpack.monitoring.elasticsearch.hosts: ["http://10.90.x.x:9200","http://10.90.x.x:9200","http://10.90.x.x:9200"]
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "填入设置的密码"
复制代码
pipelines.yml
- pipeline.id: my-logstash
path.config: "/usr/share/logstash/config/*.conf"
pipeline.workers: 3
复制代码
部署完成后,访问地址验证:
10.90.xx.xx:9600
其它内容总结:
监控配置
#是否集群
xpack.monitoring.enabled: true
#初始用户,必须是这个
xpack.monitoring.elasticsearch.username: "logstash_system"
#密码,es中为logstash_system设置的密码
xpack.monitoring.elasticsearch.password: "填入设置的密码"
#es的集群x
xpack.monitoring.elasticsearch.hosts: ["http://10.90.x.x:9200","http://10.90.x.x:9200","http://10.90.x.x:9200"]
复制代码
配置和概念
会自动生成一个字段@timestamp,默认该字段存储的是Logstash收到消息/事件(event)的时间,也就是说这个字段不是日志产生的真实时间
@timestamp 这个字段是logstash解析出来的,当成字段存储在es中,这个也可以自定义匹配规则
文件布局规划: https://segmentfault.com/a/1190000015242897 在容器映射的时候可能会用到
每个 logstash 过滤插件,都会有四个方法叫 add_tag, remove_tag, add_field 和 remove_field。它们在插件过滤匹配成功时生效
前端可视化工具cerebro
这个也是一个管理es的工具,看个人使用习惯,可以作为备用组件
docker run -d -p 9000:9000 -v /data/cerebro/application.conf:/opt/cerebro/conf/application.conf --name es-cerebro lmenezes/cerebro:latest