很多公司还是在单体项目中苦苦挣扎,没有必要上elk系统,大家都懂的一个原则系统的技术栈越多系统越复杂,维护起来也越麻烦,在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目,并发更是少的可怜,唯一出问题的可能性就是联表太多效率低了下来,做的和erp系统一样的臃肿。在追求微服务多节点部署的情况下这时就有必要使用ELK系统去查问题的可能性。不同服务之间的业务调用日志打印在不同目录下,这样就提高的查问题的效率,同时也提高了日志分析的方便性提高了效率。
我用的版本都是 6.7.2 很久之前pull下来的镜像,现在镜像加速好像失效了,去找个加速换下重启就能用了 需要尝试,不知道什么时候就又失效了
logstash 7.6.2 fa5b3b1e9757 4 years ago 813MB
kibana 7.6.2 f70986bc5191 4 years ago 1.01GB
elasticsearch 7.6.2 f29a1ee41030 4 years ago 791MB
大家可以看到是4年前pull的版本了
在linux系统上看下是否在目录下存在文件
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://qoe0omj6.mirror.aliyuncs.com"]
}
有修改registry-mirrors 可以多添加几个,有能使用的我这个是不能使用。
然后重启docker 验证能否pull镜像
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker pull elasticsearch 不加版本默认最新版本
[root@localhost ~]# docker pull elasticsearch:6.7.2 指定下载最新版本
其他两组件也是这样获取,注意使用版本一致的中间件不然会有兼容的问题
mkdir -p /home/elasticsearch/config 创建文件夹后面启动容器使用
mkdir -p /home/elasticsearch/data
echo "http.host: 0.0.0.0" >/home/elasticsearch/config/elasticsearch.yml 创建配置文件写入 可以用标准的配置文件 现在简单创建写下
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /home/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.6.2
-p: 选项用于将容器的端口映射到主机的端口。
--name elasticsearch: 这为容器指定了一个名称(elasticsearch),便于后续管理和访问。您可以使用这个名称来停止、启动或删除容器。
-e: 选项用于设置环境变量
-v 选项用于挂载卷,将主机目录或文件挂载到容器内。
-d: 该选项表示以分离模式(detached mode)运行容器,即在后台运行容器,而不是在前台显示容器的日志。
-p 9200:9200 -p 9300:9300
9200 是 Elasticsearch 的 HTTP 端口,通常用于发送 REST 请求。
9300 是 Elasticsearch 的传输端口,通常用于节点间的通信。
这行命令将容器的 9200 和 9300 端口分别映射到主机的 9200 和 9300 端口。
-e "discovery.type=single-node" 设置 discovery.type 为 single-node,指示 Elasticsearch 以单节点模式运行,适合开发和测试环境。
-e "cluster.name=elasticsearch": 这一行设置了集群的名称为 elasticsearch。集群名称用于标识和管理多个节点的集群。
elasticsearch:7.6.2:这是要运行的 Docker 镜像的名称和标签。这里指定使用 elasticsearch 镜像的 7.6.2 版本。
直接ip:9200 如果出现页面部署成功
创建配置文件
vi /home/kibana/config/kibana.yml
配置文件内容
server.name: kibana
server.host: "0"
#elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.hosts: [ "http://elasticsearch的IP:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#设置kibana中文显示
i18n.locale: zh-CN
启动kibana
docker run --name kibana -p 5601:5601 \
-v /home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.6.2
直接ip:5601 如果出现页面部署成功
创建些目录
mkdir -p /home/logstash/conf.d
mkdir -p /home/logstash/config
mkdir -p /home/logstash/logs
在config下创建logstash.yml
配置内容
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: "http://192.168.42.117:9200" # es地址
path.config: /usr/share/logstash/config/conf.d/*.conf
path.logs: /usr/share/logstash/logs
可能出现的问题
xpack.monitoring.elasticsearch.hosts: "http://127.0.0.1:9200" # es地址 能是虚拟机配置问题我需要用本机ip才能访问 用http://127.0.0.1 本地不能访问到 es
/home/logstash/conf.d 目录下的文件 *.conf 配置的是服务日志传给logstash的一些配置
input{
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560 # 这个端口随意,要配置到springboot项目中
codec => json_lines
}
}
output{
elasticsearch{
hosts=>["192.168.42.117:9200"]
index => "gzllogstash-%{+YYYY.MM.dd}"
}
stdout { codec=> rubydebug }
}
我用到的文件名字是log_to_es.conf 这个文件的内容就是上面的配置
启动
docker run -p 9600:9600 -p 4560:4560 --name=logstash \
--restart=always --privileged=true\
-e ES_JAVA_OPTS="-Xms1g -Xmx2g" \
-v /home/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /home/logstash/conf.d:/usr/share/logstash/config/conf.d \
-v /home/logstash/logs:/usr/share/logstash/logs \
-d logstash:7.6.2
添加依赖 注意选择对应springboot的版本
net.logstash.logback
logstash-logback-encoder
6.6
配置logback-spring.xml
${CONSOLE_LOG_PATTERN}
UTF-8
ACCEPT
DENY
${LOG_PATH}/${appName}.%d{yyyy-MM-dd}.%i.log
100MB
30
${FILE_LOG_PATTERN}
UTF-8
192.168.42.117:4560
0
512
配置文件和正常的日志文件一样注意添加logstash相关的关键在于
192.168.42.117:4560
后面还会更新配置输出日志的格式内容等问题
验证下是否日志传到logstash中了
docker logs -fn 1000 logstash
你能看到传过去的日志新写