The app concurrency metric isn’t the best for seeing how requests are distributed across machines.
The metric only shows how many requests are currently being processed at the time the metric is collected. That means if the machine happens to be processing no requests during the split second that the metric is being collected, it will report 0 even if it was processing 1000 requests a split second ago.
I would suggest using something like the following query with a stacked graph to get an idea of the distribution of requests:
sum(increase(fly_app_http_response_time_seconds_bucket{app="APP_NAME"}[15s])) by (instance)