在统信UOS上部署ELK需严格适配ARM64/x86_64架构:创建无家目录elk用户、安装UOS签名版OpenJDK11与ES 7.17.20离线包、禁用memlock、配置单节点模式并以elk用户顺序启动服务。

在统信UOS系统上配置ELK日志收集分析系统,需绕过ARM64/x86_64架构混用陷阱、规避国产系统安全策略拦截、解决非root用户下JVM内存锁定失败问题,且不能直接复用Elastic官方x86_64包——否则启动即报Illegal Instruction错误。
创建专用elk用户与权限隔离
先创建独立用户组和无家目录用户,避免SELinux或DSF策略因默认/home/elk路径触发拦截:
sudo groupadd elk
sudo useradd -g elk -M -s /bin/bash elk
为elk用户设置密码:
sudo passwd elk
【必须执行】切换后立即验证身份:
su - elk -c 'id'
输出中必须同时包含uid=1001(elk)和gid=1001(elk),否则后续所有组件目录权限将失效,Elasticsearch拒绝启动。
安装适配UOS的Java运行环境
ARM64 UOS服务器版不可用应用商店JDK,必须手动部署aarch64签名版OpenJDK11;x86_64桌面版可跳过此步。
方法一(ARM64):下载Eclipse Adoptium签名版
curl -L -o jdk-11.0.22+7.tar.gz https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.22%2B7/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.22_7.tar.gz
解压并建立标准软链接:
sudo mkdir -p /usr/lib/jvm && sudo tar -xzf jdk-11.0.22+7.tar.gz -C /usr/lib/jvm/ && sudo ln -s /usr/lib/jvm/jdk-11.0.22+7 /usr/lib/jvm/java-11-temurin-arm64
配置全局JAVA_HOME:
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-temurin-arm64' | sudo tee -a /etc/profile && echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile && source /etc/profile
验证是否生效:
java -version | grep aarch64
无输出即失败,需重装。
部署UOS认证版Elasticsearch 7.17.20
必须使用统信生态站签名离线包,避免Glibc版本冲突与非法指令问题——官网x86_64包在UOS上运行会直接崩溃。
下载并解压:
wget https://mirrors.uniontech.com/official/enterprise/7.17.20/elasticsearch-7.17.20-uos-arm64.tar.gz
sudo tar -xzf elasticsearch-7.17.20-uos-arm64.tar.gz -C /usr/share/
授权给elk用户:
sudo chown -R elk:elk /usr/share/elasticsearch
创建数据与日志目录(由elk用户拥有):
sudo mkdir -p /var/lib/elasticsearch /var/log/elasticsearch
sudo chown -R elk:elk /var/lib/elasticsearch /var/log/elasticsearch
配置Elasticsearch核心参数
编辑/usr/share/elasticsearch/config/elasticsearch.yml:
vi /usr/share/elasticsearch/config/elasticsearch.yml
写入以下最小必要配置(注意缩进必须为空格,不可用tab):
cluster.name: uos-elk-cluster
node.name: uos-node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
这一步禁用集群发现机制,适配单机ELK部署场景;若强行保留multi-node配置却只启一个节点,Elasticsearch将无限等待其他节点加入,服务卡死在启动阶段。
禁用memlock并提升系统限制
统信UOS默认启用memlock限制,不关闭会导致JVM内存锁定失败,Elasticsearch进程秒退。
编辑/etc/security/limits.conf,追加两行:
echo "elk soft memlock unlimited" | sudo tee -a /etc/security/limits.conf
echo "elk hard memlock unlimited" | sudo tee -a /etc/security/limits.conf
同时调整内核参数:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
安装并配置Logstash
从统信生态站获取Logstash 7.17.20-uos-arm64离线包(路径同Elasticsearch),解压至/usr/share/并授权:
sudo tar -xzf logstash-7.17.20-uos-arm64.tar.gz -C /usr/share/ && sudo chown -R elk:elk /usr/share/logstash
创建最简采集配置文件:
mkdir -p /usr/share/logstash/pipeline/
vi /usr/share/logstash/pipeline/logstash.conf
填入标准三段式结构:
input { file { path => "/var/log/messages" start_position => "end" } }
filter { grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:log_message}" } } }
output { elasticsearch { hosts => ["http://127.0.0.1:9200"] index => "syslog-%{+YYYY.MM.dd}" } }
安装Kibana并绑定本地访问
下载Kibana 7.17.20-uos-arm64包,解压并授权:
sudo tar -xzf kibana-7.17.20-uos-arm64.tar.gz -C /usr/share/ && sudo chown -R elk:elk /usr/share/kibana
编辑/usr/share/kibana/config/kibana.yml:
server.host: "127.0.0.1"
server.port: 5601
elasticsearch.hosts: ["http://127.0.0.1:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "changeme"
注意:7.17.20默认未启用安全模块,此处密码仅为占位;若误填真实密码而未开启xpack.security.enabled,Kibana将无法连接ES。
以elk用户启动全部服务
切回elk用户:
su - elk
按顺序启动(顺序不可颠倒):
/usr/share/elasticsearch/bin/elasticsearch -d
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf --path.data /tmp/logstash-data &
/usr/share/kibana/bin/kibana --no-daemon &
检查端口监听状态:
curl -X GET "http://127.0.0.1:9200/?pretty"
curl -X GET "http://127.0.0.1:5601/api/status"











