文章目录
一、安装docker
1.apt-get安装
sudo apt-get update
sudo apt-get install docker-io
2.安装完成可以看到docker版本信息
docker -v
1.1修改docker镜像源
国内镜像源:
Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
阿里云:https://y0qd3iq.mirror.aliyuncs.com
- 新建
/etc/docker/daemon.json
文件,增加以下内容
{
"registry-mirrors": ["镜像地址"]
}
- 重启docker服务
service docker restart
- 查看镜像源是否修改成功
docker info
二、安装mysql
1.拉取mysql镜像
docker pull mysql:8.0.18
2.根据此镜像建立容器并且设置mysql密码
docker run --name mysql --privileged=true -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.18
3.查看容器是否启动成功
docker ps
4.进入容器内部
docker exec -it mysql /bin/bash
进入容器内部后就可以进入mysql了.
mysql -u root -p
2.1、mysql执行docker外的.sql文件
方法就是先将docker外的.sql文件copy进docker mysql容器内,再执行sql文件。
1.将/opt/下的test.sql放到docker mysql容器下的/opt
docker cp /opt/test.sql mysql:/opt/test.sql
2.进入容器内部的mysql执行sql文件
source /opt/test.sql
三、安装redis
1.拉取redis镜像
docker pull redis
2.启动redis容器
docker run -itd --name redis -p 6379:6379 redis --requirepass "123456"
四、安装Rabbitmq
1.拉取rabbitmq镜像
#该版本包含了web管理界面
docker pull rabbitmq:management
2.启动rabbitmq容器
docker run --hostname rabbitmq01 -itd --name rabbitmq01 -e RABBITMQ_DEFAULT_USER='用户名' -e RABBITMQ_DEFAULT_PASS='密码' -v /opt/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:management
3.访问http://localhost:15672/
或者curl http://localhost:15672/
五、安装ElasticSearch
1.拉取elasticsearch镜像
docker pull elasticsearch:5.6.9
2.启动elasticsearch容器
docker run --name es -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:5.6.9
3.查看容器是否启动
docker ps
一般的容器已经启动了,但是我并没有启动成功。
4.查看容器日志
docker logs 容器ID
得到如下日志:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/hs_err_pid1.log
原来elasticsearch5.0需要给jvm分配2G内存,内存不够,所以启动不起来,只要指定启动的JVM内存就行了
5.指定启动elasticsearch容器并指定jvm内存
docker run --name es -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" elasticsearch:5.6.9
6.查看容器是否启动成功
docker ps
或者
curl 'http://localhost:9200/?pretty'
注意:
es容器启动后经常一段时间后自动退出,log显示max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
,原因是因为由于容器虚拟内存空间不够。
解决方法:
#宿主机上修改配置文件
vim /etc/sysctl.conf
#在最后一行上加上
vm.max_map_count=262144
#加载参数
sysctl -p
#重启容器
docker restart es
六、安装Kibana
1.拉取kibana镜像
docker pull kibana:5.6.9
2.启动kibana容器
docker run --name kibana -e ELASTICSEARCH_URL=http://172.25.78.44:9200 -p 5601:5601 -d kibana:5.6.9
3.启动成功
访问http://172.25.78.44:5601可以看到kibana画面
4.启动成功但是显示kibana未连接elasticsearch
开启9200端口(centos):
firewall-cmd --zone=public --add-port=9200/tcp --permanent
#重启防火墙
systemctl restart firewalld.service
七、安装logstash
1.拉取logstash镜像
docker pull logstash:5.6.9
2.创建一个log文件,随便写点什么
/data/logs/test.log
Hello
Wolrd
Docker
nb
3.创建logstash配置文件
/data/elk/logstash/config/logstash.yml
input{
file{
# 注意这里一定要是绝对路径,不能是相对路径
path => "/data/logs/test.log"
start_position => "beginning"
}
}
output{
stdout{ codec=> rubydebug}
elasticsearch{
hosts => ["172.25.78.44:9200"]
index => "logs"
}
}
4.启动logstash容器
docker run -itd --name logstash -p 5044:5044 --link es -v /data/logs/test.log:/data/logs/test.log -v /data/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:5.6.9 -f /usr/share/logstash/config/logstash.yml
注意: 一定要加上–link ${之前创建的elasticsearch的名字},不然会导致logstash启动成功,但是es中并没有创建logs索引。
巨坑:
之前看别人的博客,不是创建的logstash.yml,而是创建的logstash.conf
启动成功,但是过一会儿,容器自动停止。
docker logs logstash 查看log报错:
INFO logstash.agent - No config files found in path {:path=>"/usr/share/logstash/config/logstash.conf/*"}
13:27:12.121 [LogStash::Runner] ERROR logstash.agent - failed to fetch pipeline configuration {:message=>"No config files found: /usr/share/logstash/config/logstash.conf. Can you make sure this path is a logstash config file?"}
后来看logstash:5.6.9的官方文档,创建的是logstash.yml,并不是logstash.conf,应该是版本区别吧。
5.在es中查看logstash发送给es的log内容
GET /logs/_search
八、安装filebeat
1.拉取filebeat镜像
docker pull docker.elastic.co/beats/filebeat:5.6.9
2.将上面的logstash配置文件的输入方式由文件输入改为beats输入(建议新建logstash容器)
/data/elk/logstash/config/logstash.yml
input{
beats{
port => 5044
}
}
output{
stdout{ codec=> rubydebug}
elasticsearch{
hosts => ["172.25.78.44:9200"]
index => "logs"
}
}
3.创建filebeat配置文件
/data/elk/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /data/logs/*.log #这里指容器内的目录
output.logstash:
hosts: ["172.25.78.44:5044"]
4.启动filebeat容器
docker run -itd --name filebeat -v /data/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v /data/logs/test.log:/data/logs/test.log docker.elastic.co/beats/filebeat:5.6.9
5.在es中查看filebeat发送给logstash,logstash再发送给es中的log数据
GET /logs/_search
巨坑:
查看filebeat启动log发现报错:
filebeat dial tcp 172.25.78.44:5044: getsockopt: connection refused
解决方法:
5044是logstash的启动端口,可我的logstash已经启动了。后来发现我在启动logstash的时候没有指定端口映射,只要在启动logstash的时候加上-p 5044:5044
就解决了.
查看filbeat启动log发现报错:
CRIT Exiting: error loading config file: config file ("filebeat.yml") can only be writable by the owner but the permissions are "-rw-rw-r--" (to fix the permissions use: 'chmod go-w /usr/share/filebeat/filebeat.yml')
Exiting: error loading config file: config file ("filebeat.yml") can only be writable by the owner but the permissions are "-rw-rw-r--" (to fix the permissions use: 'chmod go-w /usr/share/filebeat/filebeat.yml')
解决方法:
宿主机和docker容器内filebeat.yml文件权限不一致,在宿主机内执行 chmod go-w /data/elk/filebeat/filebeat.yml
.
ELK搭建完成